Use std::make_unique when possible

We've required C++14 for a while now. As we're mostly C with a little
C++, this is less helpful, but may as well avoid bare new where
possible.

Change-Id: Icf3386e3f3b6f2092bb0089ed874cc50985f1a40
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/61429
Reviewed-by: Bob Beck <bbe@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/crypto/chacha/chacha_test.cc b/crypto/chacha/chacha_test.cc
index 00683ce..d4e5332 100644
--- a/crypto/chacha/chacha_test.cc
+++ b/crypto/chacha/chacha_test.cc
@@ -320,7 +320,7 @@
   for (size_t len = 0; len <= sizeof(kInput); len++) {
     SCOPED_TRACE(len);
 
-    std::unique_ptr<uint8_t[]> buf(new uint8_t[len]);
+    auto buf = std::make_unique<uint8_t[]>(len);
     CRYPTO_chacha_20(buf.get(), kInput, len, kKey, kNonce, kCounter);
     EXPECT_EQ(Bytes(kOutput, len), Bytes(buf.get(), len));
 
@@ -336,7 +336,7 @@
   for (size_t len = 0; len <= sizeof(kInput); len++) {
     SCOPED_TRACE(len);
 
-    std::unique_ptr<uint8_t[]> buf(new uint8_t[len]);
+    auto buf = std::make_unique<uint8_t[]>(len);
     CRYPTO_chacha_20(buf.get(), kInput, len, kKey, kNonce, kOverflowCounter);
     EXPECT_EQ(Bytes(kOverflowOutput, len), Bytes(buf.get(), len));
 
@@ -354,7 +354,7 @@
 
   static const uint32_t kCounterNonce[4] = {0};
 
-  std::unique_ptr<uint8_t[]> buf(new uint8_t[sizeof(kInput)]);
+  auto buf = std::make_unique<uint8_t[]>(sizeof(kInput));
   for (size_t len = 0; len <= 32; len++) {
     SCOPED_TRACE(len);
     CHECK_ABI(ChaCha20_ctr32, buf.get(), kInput, len, key, kCounterNonce);
diff --git a/crypto/cipher_extra/aead_test.cc b/crypto/cipher_extra/aead_test.cc
index a8d2dbd..64c65e9 100644
--- a/crypto/cipher_extra/aead_test.cc
+++ b/crypto/cipher_extra/aead_test.cc
@@ -821,7 +821,7 @@
     return;
   }
 
-  std::unique_ptr<uint8_t[]> buf(new uint8_t[1024]);
+  auto buf = std::make_unique<uint8_t[]>(1024);
   for (size_t len = 0; len <= 1024; len += 5) {
     SCOPED_TRACE(len);
     union chacha20_poly1305_open_data open_ctx = {};
diff --git a/crypto/digest_extra/digest_test.cc b/crypto/digest_extra/digest_test.cc
index 12858e2..d15e4d1 100644
--- a/crypto/digest_extra/digest_test.cc
+++ b/crypto/digest_extra/digest_test.cc
@@ -167,7 +167,7 @@
   for (size_t i = 0; i < test->repeat; i++) {
     ASSERT_TRUE(EVP_DigestUpdate(ctx.get(), test->input, strlen(test->input)));
   }
-  std::unique_ptr<uint8_t[]> digest(new uint8_t[EVP_MD_size(test->md.func())]);
+  auto digest = std::make_unique<uint8_t[]>(EVP_MD_size(test->md.func()));
   unsigned digest_len;
   ASSERT_TRUE(EVP_DigestFinal_ex(ctx.get(), digest.get(), &digest_len));
   CompareDigest(test, digest.get(), digest_len);
diff --git a/crypto/fipsmodule/aes/aes_test.cc b/crypto/fipsmodule/aes/aes_test.cc
index dd3b374..75a5aed 100644
--- a/crypto/fipsmodule/aes/aes_test.cc
+++ b/crypto/fipsmodule/aes/aes_test.cc
@@ -89,7 +89,7 @@
   ASSERT_EQ(0, AES_set_encrypt_key(key.data(), 8 * key.size(), &aes_key));
 
   // Test with implicit IV.
-  std::unique_ptr<uint8_t[]> buf(new uint8_t[ciphertext.size()]);
+  auto buf = std::make_unique<uint8_t[]>(ciphertext.size());
   int len = AES_wrap_key(&aes_key, nullptr /* iv */, buf.get(),
                          plaintext.data(), plaintext.size());
   ASSERT_GE(len, 0);
@@ -106,7 +106,7 @@
   ASSERT_EQ(0, AES_set_decrypt_key(key.data(), 8 * key.size(), &aes_key));
 
   // Test with implicit IV.
-  buf.reset(new uint8_t[plaintext.size()]);
+  buf = std::make_unique<uint8_t[]>(plaintext.size());
   len = AES_unwrap_key(&aes_key, nullptr /* iv */, buf.get(), ciphertext.data(),
                        ciphertext.size());
   ASSERT_GE(len, 0);
@@ -133,7 +133,7 @@
   // Test encryption.
   AES_KEY aes_key;
   ASSERT_EQ(0, AES_set_encrypt_key(key.data(), 8 * key.size(), &aes_key));
-  std::unique_ptr<uint8_t[]> buf(new uint8_t[plaintext.size() + 15]);
+  auto buf = std::make_unique<uint8_t[]>(plaintext.size() + 15);
   size_t len;
   ASSERT_TRUE(AES_wrap_key_padded(&aes_key, buf.get(), &len,
                                   plaintext.size() + 15, plaintext.data(),
@@ -142,7 +142,7 @@
 
   // Test decryption
   ASSERT_EQ(0, AES_set_decrypt_key(key.data(), 8 * key.size(), &aes_key));
-  buf.reset(new uint8_t[ciphertext.size() - 8]);
+  buf = std::make_unique<uint8_t[]>(ciphertext.size() - 8);
   ASSERT_TRUE(AES_unwrap_key_padded(&aes_key, buf.get(), &len,
                                     ciphertext.size() - 8, ciphertext.data(),
                                     ciphertext.size()));
diff --git a/crypto/fipsmodule/bn/bn_test.cc b/crypto/fipsmodule/bn/bn_test.cc
index 92da5f2..5bf2e13 100644
--- a/crypto/fipsmodule/bn/bn_test.cc
+++ b/crypto/fipsmodule/bn/bn_test.cc
@@ -458,8 +458,8 @@
       SCOPED_TRACE(num_a);
       size_t num_r = 2 * num_a;
       // Use newly-allocated buffers so ASan will catch out-of-bounds writes.
-      std::unique_ptr<BN_ULONG[]> a_words(new BN_ULONG[num_a]),
-          r_words(new BN_ULONG[num_r]);
+      auto a_words = std::make_unique<BN_ULONG[]>(num_a);
+      auto r_words = std::make_unique<BN_ULONG[]>(num_r);
       ASSERT_TRUE(bn_copy_words(a_words.get(), num_a, a.get()));
 
       bn_mul_small(r_words.get(), num_r, a_words.get(), num_a, a_words.get(),
@@ -525,8 +525,9 @@
         SCOPED_TRACE(num_b);
         size_t num_r = num_a + num_b;
         // Use newly-allocated buffers so ASan will catch out-of-bounds writes.
-        std::unique_ptr<BN_ULONG[]> a_words(new BN_ULONG[num_a]),
-            b_words(new BN_ULONG[num_b]), r_words(new BN_ULONG[num_r]);
+        auto a_words = std::make_unique<BN_ULONG[]>(num_a);
+        auto b_words = std::make_unique<BN_ULONG[]>(num_b);
+        auto r_words = std::make_unique<BN_ULONG[]>(num_r);
         ASSERT_TRUE(bn_copy_words(a_words.get(), num_a, a.get()));
         ASSERT_TRUE(bn_copy_words(b_words.get(), num_b, b.get()));
 
@@ -672,8 +673,9 @@
 #if !defined(BORINGSSL_SHARED_LIBRARY)
     size_t m_width = static_cast<size_t>(bn_minimal_width(m.get()));
     if (m_width <= BN_SMALL_MAX_WORDS) {
-      std::unique_ptr<BN_ULONG[]> a_words(new BN_ULONG[m_width]),
-          b_words(new BN_ULONG[m_width]), r_words(new BN_ULONG[m_width]);
+      auto a_words = std::make_unique<BN_ULONG[]>(m_width);
+      auto b_words = std::make_unique<BN_ULONG[]>(m_width);
+      auto r_words = std::make_unique<BN_ULONG[]>(m_width);
       ASSERT_TRUE(bn_copy_words(a_words.get(), m_width, a.get()));
       ASSERT_TRUE(bn_copy_words(b_words.get(), m_width, b.get()));
       bn_to_montgomery_small(a_words.get(), a_words.get(), m_width, mont.get());
@@ -691,7 +693,7 @@
       // inputs. Test this by running |bn_from_montgomery_small| on the result
       // of a product. Note |a_words| * |b_words| has an extra factor of R^2, so
       // we must reduce twice.
-      std::unique_ptr<BN_ULONG[]> prod_words(new BN_ULONG[m_width * 2]);
+      auto prod_words = std::make_unique<BN_ULONG[]>(m_width * 2);
       bn_mul_small(prod_words.get(), m_width * 2, a_words.get(), m_width,
                    b_words.get(), m_width);
       bn_from_montgomery_small(r_words.get(), m_width, prod_words.get(),
@@ -752,8 +754,9 @@
 #if !defined(BORINGSSL_SHARED_LIBRARY)
     size_t m_width = static_cast<size_t>(bn_minimal_width(m.get()));
     if (m_width <= BN_SMALL_MAX_WORDS) {
-      std::unique_ptr<BN_ULONG[]> a_words(new BN_ULONG[m_width]),
-          a_copy_words(new BN_ULONG[m_width]), r_words(new BN_ULONG[m_width]);
+      auto a_words = std::make_unique<BN_ULONG[]>(m_width);
+      auto a_copy_words = std::make_unique<BN_ULONG[]>(m_width);
+      auto r_words = std::make_unique<BN_ULONG[]>(m_width);
       ASSERT_TRUE(bn_copy_words(a_words.get(), m_width, a.get()));
       bn_to_montgomery_small(a_words.get(), a_words.get(), m_width, mont.get());
       bn_mod_mul_montgomery_small(r_words.get(), a_words.get(), a_words.get(),
@@ -815,8 +818,8 @@
       bssl::UniquePtr<BN_MONT_CTX> mont(
           BN_MONT_CTX_new_for_modulus(m.get(), ctx));
       ASSERT_TRUE(mont.get());
-      std::unique_ptr<BN_ULONG[]> r_words(new BN_ULONG[m_width]),
-          a_words(new BN_ULONG[m_width]);
+      auto r_words = std::make_unique<BN_ULONG[]>(m_width);
+      auto a_words = std::make_unique<BN_ULONG[]>(m_width);
       ASSERT_TRUE(bn_copy_words(a_words.get(), m_width, a.get()));
       bn_to_montgomery_small(a_words.get(), a_words.get(), m_width, mont.get());
       bn_mod_exp_mont_small(r_words.get(), a_words.get(), m_width, e->d,
diff --git a/crypto/fipsmodule/rand/ctrdrbg_test.cc b/crypto/fipsmodule/rand/ctrdrbg_test.cc
index 50f4297..deed19f 100644
--- a/crypto/fipsmodule/rand/ctrdrbg_test.cc
+++ b/crypto/fipsmodule/rand/ctrdrbg_test.cc
@@ -76,7 +76,7 @@
   CTR_DRBG_STATE drbg;
   ASSERT_TRUE(CTR_DRBG_init(&drbg, kSeed, nullptr, 0));
 
-  std::unique_ptr<uint8_t[]> buf(new uint8_t[CTR_DRBG_MAX_GENERATE_LENGTH]);
+  auto buf = std::make_unique<uint8_t[]>(CTR_DRBG_MAX_GENERATE_LENGTH);
   ASSERT_TRUE(CTR_DRBG_generate(&drbg, buf.get(), CTR_DRBG_MAX_GENERATE_LENGTH,
                                 nullptr, 0));
 
diff --git a/crypto/hmac_extra/hmac_test.cc b/crypto/hmac_extra/hmac_test.cc
index e65cd6a..4c0d2a1 100644
--- a/crypto/hmac_extra/hmac_test.cc
+++ b/crypto/hmac_extra/hmac_test.cc
@@ -99,7 +99,7 @@
     ASSERT_EQ(EVP_MD_size(digest), output.size());
 
     // Test using the one-shot API.
-    std::unique_ptr<uint8_t[]> mac(new uint8_t[EVP_MD_size(digest)]);
+    auto mac = std::make_unique<uint8_t[]>(EVP_MD_size(digest));
     unsigned mac_len;
     ASSERT_TRUE(HMAC(digest, key.data(), key.size(), input.data(), input.size(),
                      mac.get(), &mac_len));
diff --git a/crypto/lhash/lhash_test.cc b/crypto/lhash/lhash_test.cc
index 6b4bfad..8514fd2 100644
--- a/crypto/lhash/lhash_test.cc
+++ b/crypto/lhash/lhash_test.cc
@@ -36,7 +36,7 @@
 
 static std::unique_ptr<char[]> RandString(void) {
   unsigned len = 1 + (rand() % 3);
-  std::unique_ptr<char[]> ret(new char[len + 1]);
+  auto ret = std::make_unique<char[]>(len + 1);
 
   for (unsigned i = 0; i < len; i++) {
     ret[i] = '0' + (rand() & 7);
diff --git a/crypto/test/file_test.cc b/crypto/test/file_test.cc
index d7ef951..7362e4b 100644
--- a/crypto/test/file_test.cc
+++ b/crypto/test/file_test.cc
@@ -98,7 +98,7 @@
   ClearTest();
 
   static const size_t kBufLen = 8192 * 4;
-  std::unique_ptr<char[]> buf(new char[kBufLen]);
+  auto buf = std::make_unique<char[]>(kBufLen);
 
   bool in_instruction_block = false;
   is_at_new_instruction_block_ = false;
@@ -409,8 +409,7 @@
 }
 
 int FileTestMain(const FileTest::Options &opts) {
-  std::unique_ptr<FileLineReader> reader(
-      new FileLineReader(opts.path));
+  auto reader = std::make_unique<FileLineReader>(opts.path);
   if (!reader->is_open()) {
     fprintf(stderr, "Could not open file %s: %s.\n", opts.path,
             strerror(errno));
diff --git a/crypto/test/file_test_gtest.cc b/crypto/test/file_test_gtest.cc
index 8ff7a2b..2cb0896 100644
--- a/crypto/test/file_test_gtest.cc
+++ b/crypto/test/file_test_gtest.cc
@@ -66,9 +66,8 @@
 };
 
 void FileTestGTest(const char *path, std::function<void(FileTest *)> run_test) {
-  std::unique_ptr<StringLineReader> reader(
-      new StringLineReader(GetTestData(path)));
-  FileTest t(std::move(reader), nullptr, false);
+  FileTest t(std::make_unique<StringLineReader>(GetTestData(path)), nullptr,
+             false);
 
   while (true) {
     switch (t.ReadNext()) {
diff --git a/crypto/x509/x509_test.cc b/crypto/x509/x509_test.cc
index 404ce5b..68d75d5 100644
--- a/crypto/x509/x509_test.cc
+++ b/crypto/x509/x509_test.cc
@@ -2335,7 +2335,7 @@
   bssl::UniquePtr<uint8_t> data;
   ASSERT_TRUE(PEMToDER(&data, &data_len, kRootCAPEM));
 
-  std::unique_ptr<uint8_t[]> trailing_data(new uint8_t[data_len + 1]);
+  auto trailing_data = std::make_unique<uint8_t[]>(data_len + 1);
   OPENSSL_memcpy(trailing_data.get(), data.get(), data_len);
 
   bssl::UniquePtr<CRYPTO_BUFFER> buf_trailing_data(
@@ -2438,7 +2438,7 @@
   bssl::UniquePtr<uint8_t> data;
   ASSERT_TRUE(PEMToDER(&data, &data_len, kRootCAPEM));
 
-  std::unique_ptr<uint8_t[]> data_with_trailing_byte(new uint8_t[data_len + 1]);
+  auto data_with_trailing_byte = std::make_unique<uint8_t[]>(data_len + 1);
   OPENSSL_memcpy(data_with_trailing_byte.get(), data.get(), data_len);
   data_with_trailing_byte[data_len] = 0;
 
diff --git a/decrepit/cfb/cfb_test.cc b/decrepit/cfb/cfb_test.cc
index da9681e..67904c2 100644
--- a/decrepit/cfb/cfb_test.cc
+++ b/decrepit/cfb/cfb_test.cc
@@ -87,7 +87,7 @@
     SCOPED_TRACE(test_num);
 
     const size_t input_len = sizeof(test.plaintext);
-    std::unique_ptr<uint8_t[]> out(new uint8_t[input_len]);
+    auto out = std::make_unique<uint8_t[]>(input_len);
 
     for (size_t stride = 1; stride <= input_len; stride++) {
       bssl::ScopedEVP_CIPHER_CTX ctx;
@@ -134,7 +134,7 @@
                                      nullptr, test.key, test.iv));
     }
 
-    std::unique_ptr<uint8_t[]> plaintext(new uint8_t[input_len]);
+    auto plaintext = std::make_unique<uint8_t[]>(input_len);
     int num_bytes;
     ASSERT_TRUE(EVP_DecryptUpdate(decrypt_ctx.get(), plaintext.get(),
                                   &num_bytes, out.get(), input_len));
diff --git a/decrepit/ripemd/ripemd_test.cc b/decrepit/ripemd/ripemd_test.cc
index 6338fec..a52e743 100644
--- a/decrepit/ripemd/ripemd_test.cc
+++ b/decrepit/ripemd/ripemd_test.cc
@@ -90,7 +90,7 @@
   }
 
   static const size_t kLargeBufSize = 1000000;
-  std::unique_ptr<uint8_t[]> buf(new uint8_t[kLargeBufSize]);
+  auto buf = std::make_unique<uint8_t[]>(kLargeBufSize);
   OPENSSL_memset(buf.get(), 'a', kLargeBufSize);
   uint8_t digest[RIPEMD160_DIGEST_LENGTH];
   RIPEMD160(buf.get(), kLargeBufSize, digest);
diff --git a/ssl/ssl_test.cc b/ssl/ssl_test.cc
index b791fc3..73963c9 100644
--- a/ssl/ssl_test.cc
+++ b/ssl/ssl_test.cc
@@ -3522,7 +3522,7 @@
 
   const uint8_t *ciphertext = ticket + 16 + 16;
   size_t len = ticket_len - 16 - 16 - SHA256_DIGEST_LENGTH;
-  std::unique_ptr<uint8_t[]> plaintext(new uint8_t[len]);
+  auto plaintext = std::make_unique<uint8_t[]>(len);
 
 #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
   // Fuzzer-mode tickets are unencrypted.
@@ -6299,7 +6299,7 @@
     SSL_set_connect_state(client_.get());
     SSL_set_accept_state(server_.get());
 
-    transport_.reset(new MockQUICTransportPair);
+    transport_ = std::make_unique<MockQUICTransportPair>();
     if (!ex_data_.Set(client_.get(), transport_->client()) ||
         !ex_data_.Set(server_.get(), transport_->server())) {
       return false;
diff --git a/ssl/test/bssl_shim.cc b/ssl/test/bssl_shim.cc
index 73aa5c6..19b838a 100644
--- a/ssl/test/bssl_shim.cc
+++ b/ssl/test/bssl_shim.cc
@@ -243,7 +243,7 @@
   } while (RetryAsync(ssl, ret));
 
   if (config->peek_then_read && ret > 0) {
-    std::unique_ptr<uint8_t[]> buf(new uint8_t[static_cast<size_t>(ret)]);
+    auto buf = std::make_unique<uint8_t[]>(static_cast<size_t>(ret));
 
     // SSL_peek should synchronously return the same data.
     int ret2 = SSL_peek(ssl, buf.get(), ret);
@@ -790,8 +790,8 @@
                          SSL_CTX *ssl_ctx, const TestConfig *config,
                          const TestConfig *retry_config, bool is_resume,
                          SSL_SESSION *session, SettingsWriter *writer) {
-  bssl::UniquePtr<SSL> ssl = config->NewSSL(
-      ssl_ctx, session, std::unique_ptr<TestState>(new TestState));
+  bssl::UniquePtr<SSL> ssl =
+      config->NewSSL(ssl_ctx, session, std::make_unique<TestState>());
   if (!ssl) {
     return false;
   }
@@ -858,8 +858,8 @@
     bio = std::move(async_scoped);
   }
   if (config->is_quic) {
-    GetTestState(ssl.get())->quic_transport.reset(
-        new MockQuicTransport(std::move(bio), ssl.get()));
+    GetTestState(ssl.get())->quic_transport =
+        std::make_unique<MockQuicTransport>(std::move(bio), ssl.get());
   } else {
     SSL_set_bio(ssl.get(), bio.get(), bio.get());
     bio.release();  // SSL_set_bio takes ownership.
@@ -1144,7 +1144,7 @@
     // This mode writes a number of different record sizes in an attempt to
     // trip up the CBC record splitting code.
     static const size_t kBufLen = 32769;
-    std::unique_ptr<uint8_t[]> buf(new uint8_t[kBufLen]);
+    auto buf = std::make_unique<uint8_t[]>(kBufLen);
     OPENSSL_memset(buf.get(), 0x42, kBufLen);
     static const size_t kRecordSizes[] = {
         0, 1, 255, 256, 257, 16383, 16384, 16385, 32767, 32768, 32769};
@@ -1194,7 +1194,7 @@
         if (config->read_size > 0) {
           read_size = config->read_size;
         }
-        std::unique_ptr<uint8_t[]> buf(new uint8_t[read_size]);
+        auto buf = std::make_unique<uint8_t[]>(read_size);
 
         int n = DoRead(ssl, buf.get(), read_size);
         int err = SSL_get_error(ssl, n);
diff --git a/ssl/test/handshaker.cc b/ssl/test/handshaker.cc
index 72aaaa8..acdfe72 100644
--- a/ssl/test/handshaker.cc
+++ b/ssl/test/handshaker.cc
@@ -153,9 +153,8 @@
     return false;
   }
 
-  UniquePtr<SSL> ssl =
-      config->NewSSL(ctx.get(), /*session=*/nullptr,
-                     std::unique_ptr<TestState>(new TestState));
+  UniquePtr<SSL> ssl = config->NewSSL(ctx.get(), /*session=*/nullptr,
+                                      std::make_unique<TestState>());
   if (!ssl) {
     fprintf(stderr, "Error creating SSL object in handshaker.\n");
     ERR_print_errors_fp(stderr);
diff --git a/ssl/test/test_config.cc b/ssl/test/test_config.cc
index baff66b..7a188f6 100644
--- a/ssl/test/test_config.cc
+++ b/ssl/test/test_config.cc
@@ -139,7 +139,7 @@
                         bool skip_handshaker = false) {
   return Flag{name, true, skip_handshaker,
               [=](TestConfig *config, const char *param) -> bool {
-                (config->*field).reset(new std::string(param));
+                (config->*field) = std::make_unique<std::string>(param);
                 return true;
               }};
 }
@@ -972,7 +972,7 @@
     return false;
   }
 
-  std::unique_ptr<uint8_t[]> buf(new uint8_t[in.size() / 2]);
+  auto buf = std::make_unique<uint8_t[]>(in.size() / 2);
   for (size_t i = 0; i < in.size() / 2; i++) {
     uint8_t high, low;
     if (!OPENSSL_fromxdigit(&high, in[i * 2]) ||
@@ -1584,7 +1584,7 @@
             if (uncompressed_len != 2 + in_len) {
               return 0;
             }
-            std::unique_ptr<uint8_t[]> buf(new uint8_t[2 + in_len]);
+            auto buf = std::make_unique<uint8_t[]>(2 + in_len);
             buf[0] = 0;
             buf[1] = 0;
             OPENSSL_memcpy(&buf[2], in, in_len);
diff --git a/tool/digest.cc b/tool/digest.cc
index d810928..e66f013 100644
--- a/tool/digest.cc
+++ b/tool/digest.cc
@@ -115,7 +115,7 @@
   }
 
   static const size_t kBufSize = 8192;
-  std::unique_ptr<uint8_t[]> buf(new uint8_t[kBufSize]);
+  auto buf = std::make_unique<uint8_t[]>(kBufSize);
 
   bssl::ScopedEVP_MD_CTX ctx;
   if (!EVP_DigestInit_ex(ctx.get(), md, NULL)) {
diff --git a/tool/pkcs12.cc b/tool/pkcs12.cc
index 3d8a1cd..c19fd3a 100644
--- a/tool/pkcs12.cc
+++ b/tool/pkcs12.cc
@@ -72,7 +72,7 @@
   }
   const size_t size = st.st_size;
 
-  std::unique_ptr<uint8_t[]> contents(new uint8_t[size]);
+  auto contents = std::make_unique<uint8_t[]>(size);
   size_t off = 0;
   while (off < size) {
     size_t bytes_read;
diff --git a/tool/sign.cc b/tool/sign.cc
index a511e8d..038d853 100644
--- a/tool/sign.cc
+++ b/tool/sign.cc
@@ -68,7 +68,7 @@
   }
 
   size_t sig_len = EVP_PKEY_size(key.get());
-  std::unique_ptr<uint8_t[]> sig(new uint8_t[sig_len]);
+  auto sig = std::make_unique<uint8_t[]>(sig_len);
   if (!EVP_DigestSign(ctx.get(), sig.get(), &sig_len, data.data(),
                       data.size())) {
     return false;
diff --git a/tool/speed.cc b/tool/speed.cc
index 8b4b13c..089a460 100644
--- a/tool/speed.cc
+++ b/tool/speed.cc
@@ -476,22 +476,21 @@
   const size_t nonce_len = EVP_AEAD_nonce_length(aead);
   const size_t overhead_len = EVP_AEAD_max_overhead(aead);
 
-  std::unique_ptr<uint8_t[]> key(new uint8_t[key_len]);
+  auto key = std::make_unique<uint8_t[]>(key_len);
   OPENSSL_memset(key.get(), 0, key_len);
-  std::unique_ptr<uint8_t[]> nonce(new uint8_t[nonce_len]);
+  auto nonce = std::make_unique<uint8_t[]>(nonce_len);
   OPENSSL_memset(nonce.get(), 0, nonce_len);
-  std::unique_ptr<uint8_t[]> in_storage(new uint8_t[chunk_len + kAlignment]);
+  auto in_storage = std::make_unique<uint8_t[]>(chunk_len + kAlignment);
   // N.B. for EVP_AEAD_CTX_seal_scatter the input and output buffers may be the
   // same size. However, in the direction == evp_aead_open case we still use
   // non-scattering seal, hence we add overhead_len to the size of this buffer.
-  std::unique_ptr<uint8_t[]> out_storage(
-      new uint8_t[chunk_len + overhead_len + kAlignment]);
-  std::unique_ptr<uint8_t[]> in2_storage(
-      new uint8_t[chunk_len + overhead_len + kAlignment]);
-  std::unique_ptr<uint8_t[]> ad(new uint8_t[ad_len]);
+  auto out_storage =
+      std::make_unique<uint8_t[]>(chunk_len + overhead_len + kAlignment);
+  auto in2_storage =
+      std::make_unique<uint8_t[]>(chunk_len + overhead_len + kAlignment);
+  auto ad = std::make_unique<uint8_t[]>(ad_len);
   OPENSSL_memset(ad.get(), 0, ad_len);
-  std::unique_ptr<uint8_t[]> tag_storage(
-      new uint8_t[overhead_len + kAlignment]);
+  auto tag_storage = std::make_unique<uint8_t[]>(overhead_len + kAlignment);
 
 
   uint8_t *const in =
@@ -760,7 +759,7 @@
   if (peer_value_len == 0) {
     return false;
   }
-  std::unique_ptr<uint8_t[]> peer_value(new uint8_t[peer_value_len]);
+  auto peer_value = std::make_unique<uint8_t[]>(peer_value_len);
   peer_value_len = EC_POINT_point2oct(
       EC_KEY_get0_group(peer_key.get()), EC_KEY_get0_public_key(peer_key.get()),
       POINT_CONVERSION_UNCOMPRESSED, peer_value.get(), peer_value_len, nullptr);
diff --git a/util/fipstools/acvp/modulewrapper/modulewrapper.cc b/util/fipstools/acvp/modulewrapper/modulewrapper.cc
index 0c1359e..5274598 100644
--- a/util/fipstools/acvp/modulewrapper/modulewrapper.cc
+++ b/util/fipstools/acvp/modulewrapper/modulewrapper.cc
@@ -75,7 +75,7 @@
 
 // static
 std::unique_ptr<RequestBuffer> RequestBuffer::New() {
-  return std::unique_ptr<RequestBuffer>(new RequestBufferImpl);
+  return std::make_unique<RequestBufferImpl>();
 }
 
 static bool ReadAll(int fd, void *in_data, size_t data_len) {