proxygen
OpenSSLPortabilityTest.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2017-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 <ctime>
18 
21 
22 using namespace folly;
23 using namespace folly::ssl;
24 using namespace testing;
25 
26 TEST(OpenSSLPortabilityTest, TestRSASetter) {
27  RsaUniquePtr r(RSA_new());
28  BIGNUM* n = BN_new();
29  BIGNUM* e = BN_new();
30  BIGNUM* d = BN_new();
31  BIGNUM* n_actual;
32  BIGNUM* e_actual;
33  BIGNUM* d_actual;
34  EXPECT_TRUE(BN_set_bit(n, 1));
35  EXPECT_TRUE(BN_set_bit(e, 3));
36  EXPECT_TRUE(BN_set_bit(d, 2));
37  RSA_set0_key(r.get(), n, e, d);
38  RSA_get0_key(
39  r.get(),
40  (const BIGNUM**)&n_actual,
41  (const BIGNUM**)&e_actual,
42  (const BIGNUM**)&d_actual);
43  // BN_cmp returns 0 if the two BIGNUMs are equal
44  EXPECT_FALSE(BN_cmp(n, n_actual));
45  EXPECT_FALSE(BN_cmp(e, e_actual));
46  EXPECT_FALSE(BN_cmp(d, d_actual));
47 
48  RsaUniquePtr public_key(RSA_new());
49  BIGNUM* n_public = BN_new();
50  BIGNUM* e_public = BN_new();
51  EXPECT_TRUE(BN_set_bit(n_public, 1));
52  EXPECT_TRUE(BN_set_bit(e_public, 3));
53  RSA_set0_key(public_key.get(), n_public, e_public, nullptr);
54  BIGNUM* n_public_actual;
55  BIGNUM* e_public_actual;
56  RSA_get0_key(
57  public_key.get(),
58  (const BIGNUM**)&n_public_actual,
59  (const BIGNUM**)&e_public_actual,
60  nullptr);
61  EXPECT_FALSE(BN_cmp(n_public, n_public_actual));
62  EXPECT_FALSE(BN_cmp(e_public, e_public_actual));
63 }
64 
65 TEST(OpenSSLPortabilityTest, TestEcdsaSigPortability) {
66  EcdsaSigUniquePtr ecdsa(ECDSA_SIG_new());
67  BIGNUM* r = BN_new();
68  BIGNUM* s = BN_new();
69  BIGNUM* r_actual;
70  BIGNUM* s_actual;
71  EXPECT_TRUE(BN_set_bit(r, 1));
72  EXPECT_TRUE(BN_set_bit(s, 2));
73  EXPECT_TRUE(ECDSA_SIG_set0(ecdsa.get(), r, s));
75  ecdsa.get(), (const BIGNUM**)&r_actual, (const BIGNUM**)&s_actual);
76  // BN_cmp returns 0 if the two BIGNUMs are equal
77  EXPECT_FALSE(BN_cmp(r, r_actual));
78  EXPECT_FALSE(BN_cmp(s, s_actual));
79 }
80 
81 TEST(OpenSSLPortabilityTest, TestX509RevokedApi) {
82  X509_REVOKED* rev = X509_REVOKED_new();
83 
84  ASN1_INTEGER* serial = ASN1_INTEGER_new();
85  ASN1_INTEGER_set(serial, 1234L);
86 
87  ASN1_TIME* revocation_date = ASN1_TIME_new();
88  time_t t = time(nullptr);
89  ASN1_TIME_set(revocation_date, t);
90 
91  X509_REVOKED_set_serialNumber(rev, serial);
92  X509_REVOKED_set_revocationDate(rev, revocation_date);
93 
94  const ASN1_INTEGER* retrieved_serial = X509_REVOKED_get0_serialNumber(rev);
95  const ASN1_TIME* retrieved_date = X509_REVOKED_get0_revocationDate(rev);
96 
97  EXPECT_EQ(0, ASN1_INTEGER_cmp(serial, retrieved_serial));
98 
99 #if FOLLY_HAVE_OPENSSL_ASN1_TIME_DIFF
100  int diff_days;
101  int diff_secs;
102  ASN1_TIME_diff(&diff_days, &diff_secs, revocation_date, retrieved_date);
103  EXPECT_EQ(0, diff_days);
104  EXPECT_EQ(0, diff_secs);
105 #else
106  (void)revocation_date;
107  (void)retrieved_date;
108 #endif
109 
110  ASN1_INTEGER_free(serial);
111  ASN1_TIME_free(revocation_date);
112  X509_REVOKED_free(rev);
113 }
void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps)
Definition: OpenSSL.cpp:417
bool RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d)
Definition: OpenSSL.cpp:353
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
const ASN1_INTEGER * X509_REVOKED_get0_serialNumber(const X509_REVOKED *r)
Definition: OpenSSL.cpp:463
std::unique_ptr< RSA, RsaDeleter > RsaUniquePtr
—— Concurrent Priority Queue Implementation ——
Definition: AtomicBitSet.h:29
std::unique_ptr< ECDSA_SIG, EcdsaSigDeleter > EcdsaSigUniquePtr
int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s)
Definition: OpenSSL.cpp:405
const ASN1_TIME * X509_REVOKED_get0_revocationDate(const X509_REVOKED *r)
Definition: OpenSSL.cpp:467
#define EXPECT_TRUE(condition)
Definition: gtest.h:1859
static set< string > s
#define EXPECT_FALSE(condition)
Definition: gtest.h:1862
TEST(SequencedExecutor, CPUThreadPoolExecutor)
std::chrono::nanoseconds time()