// Copyright 2019 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/test/key_util.h" #include #include #include "base/files/file_util.h" #include "base/logging.h" #include "net/ssl/ssl_private_key.h" #include "net/ssl/test_ssl_private_key.h" #include "third_party/boringssl/src/include/openssl/bio.h" #include "third_party/boringssl/src/include/openssl/evp.h" #include "third_party/boringssl/src/include/openssl/pem.h" namespace net { namespace key_util { bssl::UniquePtr LoadEVP_PKEYFromPEM(const base::FilePath& filepath) { std::string data; if (!base::ReadFileToString(filepath, &data)) { LOG(ERROR) << "Could not read private key file: " << filepath.value(); return nullptr; } bssl::UniquePtr bio(BIO_new_mem_buf(const_cast(data.data()), static_cast(data.size()))); if (!bio) { LOG(ERROR) << "Could not allocate BIO for buffer?"; return nullptr; } bssl::UniquePtr result( PEM_read_bio_PrivateKey(bio.get(), nullptr, nullptr, nullptr)); if (!result) { LOG(ERROR) << "Could not decode private key file: " << filepath.value(); return nullptr; } return result; } scoped_refptr LoadPrivateKeyOpenSSL( const base::FilePath& filepath) { bssl::UniquePtr key = LoadEVP_PKEYFromPEM(filepath); if (!key) return nullptr; return WrapOpenSSLPrivateKey(std::move(key)); } } // namespace key_util } // namespace net