blob: 82e92b0e54ef4116899949bc79bf75128942dc91 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "crypto/pem.h"
#include "base/containers/to_vector.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/strings/string_view_util.h"
#include "third_party/boringssl/src/pki/pem.h"
namespace crypto::pem {
std::vector<bssl::PEMToken> MessagesFromFile(
const base::FilePath& path,
std::initializer_list<const std::string_view> allowed_types) {
std::optional<std::vector<uint8_t>> contents = base::ReadFileToBytes(path);
if (!contents.has_value()) {
return {};
}
base::span<const std::string_view> types(allowed_types);
return bssl::PEMDecode(base::as_string_view(*contents),
bssl::Span<const std::string_view>(types));
}
std::optional<std::vector<uint8_t>> SingleMessageFromFile(
const base::FilePath& path,
std::string_view allowed_type) {
std::optional<std::vector<uint8_t>> contents = base::ReadFileToBytes(path);
if (!contents.has_value()) {
return std::nullopt;
}
std::optional<std::string> body =
bssl::PEMDecodeSingle(base::as_string_view(*contents), allowed_type);
if (!body.has_value()) {
return std::nullopt;
}
return base::ToVector(base::as_byte_span(*body));
}
} // namespace crypto::pem