proxygen
TestUtil.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018-present, Facebook, Inc.
3  * All rights reserved.
4  *
5  * This source code is licensed under the BSD-style license found in the
6  * LICENSE file in the root directory of this source tree.
7  */
8 
10 
11 #include <folly/String.h>
13 #include <sodium/randombytes.h>
14 
15 using namespace folly;
16 using namespace folly::ssl;
17 
18 namespace fizz {
19 namespace test {
20 
22  BioUniquePtr bio(BIO_new(BIO_s_mem()));
23  CHECK(bio);
24  CHECK_EQ(BIO_write(bio.get(), key.data(), key.size()), key.size());
25  EvpPkeyUniquePtr pkey(
26  PEM_read_bio_PrivateKey(bio.get(), nullptr, nullptr, nullptr));
27  CHECK(pkey);
28  return pkey;
29 }
30 
32  BioUniquePtr bio(BIO_new(BIO_s_mem()));
33  CHECK(bio);
34  CHECK_EQ(BIO_write(bio.get(), key.data(), key.size()), key.size());
35  EvpPkeyUniquePtr pkey(
36  PEM_read_bio_PUBKEY(bio.get(), nullptr, nullptr, nullptr));
37  CHECK(pkey);
38  return pkey;
39 }
40 
41 // Converts the hex encoded string to an IOBuf.
42 std::unique_ptr<folly::IOBuf> toIOBuf(folly::StringPiece hexData) {
43  std::string out;
44  CHECK(folly::unhexlify(hexData, out));
45  return folly::IOBuf::copyBuffer(out);
46 }
47 
49  BioUniquePtr bio(BIO_new(BIO_s_mem()));
50  CHECK(bio);
51  CHECK_EQ(BIO_write(bio.get(), cert.data(), cert.size()), cert.size());
52  X509UniquePtr x509(PEM_read_bio_X509(bio.get(), nullptr, nullptr, nullptr));
53  CHECK(x509);
54  return x509;
55 }
56 
57 std::unique_ptr<folly::IOBuf> getCertData(folly::StringPiece cert) {
58  return OpenSSLCertUtils::derEncode(*getCert(cert));
59 }
60 
61 static struct randombytes_implementation mockRandom = {
62  []() { return "test"; }, // implementation_name
63  []() { return (uint32_t)0x44444444; }, // random
64  nullptr, // stir
65  nullptr, // uniform
66  [](void* const buf, const size_t size) { memset(buf, 0x44, size); }, // buf
67  nullptr}; // close
68 
69 void useMockRandom() {
70  randombytes_set_implementation(&mockRandom);
71 }
72 } // namespace test
73 } // namespace fizz
bool unhexlify(const InputString &input, OutputString &output)
Definition: String-inl.h:616
std::unique_ptr< X509, X509Deleter > X509UniquePtr
std::unique_ptr< BIO, BioDeleter > BioUniquePtr
std::unique_ptr< folly::IOBuf > toIOBuf(std::string hexData)
constexpr size_type size() const
Definition: Range.h:431
std::unique_ptr< EVP_PKEY, EvpPkeyDeleter > EvpPkeyUniquePtr
EvpPkeyUniquePtr getPrivateKey(StringPiece key)
Definition: TestUtil.cpp:21
—— Concurrent Priority Queue Implementation ——
Definition: AtomicBitSet.h:29
folly::ssl::X509UniquePtr getCert(folly::StringPiece cert)
Definition: TestUtil.cpp:48
void useMockRandom()
Definition: TestUtil.cpp:69
static struct randombytes_implementation mockRandom
Definition: TestUtil.cpp:61
constexpr auto size(C const &c) -> decltype(c.size())
Definition: Access.h:45
constexpr Iter data() const
Definition: Range.h:446
Definition: Actions.h:16
const char * string
Definition: Conv.cpp:212
std::unique_ptr< folly::IOBuf > getCertData(folly::StringPiece cert)
Definition: TestUtil.cpp:57
EvpPkeyUniquePtr getPublicKey(StringPiece key)
Definition: TestUtil.cpp:31
static std::unique_ptr< IOBuf > derEncode(X509 &)
static std::unique_ptr< IOBuf > copyBuffer(const void *buf, std::size_t size, std::size_t headroom=0, std::size_t minTailroom=0)
Definition: IOBuf.h:1587