// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

#ifndef THIRD_PARTY_CREDENTIO_CRYPTO_DEFAULT_TRUST_STORE_H_
#define THIRD_PARTY_CREDENTIO_CRYPTO_DEFAULT_TRUST_STORE_H_

#include <memory>

#include "absl/status/statusor.h"
#include "absl/strings/string_view.h"
#include "openssl/pki/verify.h"

namespace credentio {

// Loads a trust store from a PEM file containing a set of certificates.
// Returns an error if the PEM file is malformed or no certs are found.
absl::StatusOr<std::unique_ptr<bssl::VerifyTrustStore>> LoadTrustStore(
    absl::string_view trust_anchor_pem);

}  // namespace credentio

#endif  // THIRD_PARTY_CREDENTIO_CRYPTO_DEFAULT_TRUST_STORE_H_
