# 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.
#

load("@rules_cc//cc:cc_library.bzl", "cc_library")
load("@rules_cc//cc:cc_test.bzl", "cc_test")

package(default_visibility = ["//visibility:public"])

cc_library(
    name = "manifest_store_view",
    srcs = ["manifest_store_view.cc"],
    hdrs = ["manifest_store_view.h"],
    deps = [
        "//constants:labels",
        "//cose:sig_structure",
        "//jumbf:box",
        "//jumbf:parse",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings:string_view",
    ],
)

cc_test(
    name = "manifest_store_view_test",
    srcs = ["manifest_store_view_test.cc"],
    deps = [
        ":manifest_store_view",
        "//constants:labels",
        "//cose:sig_structure",
        "//jumbf:box",
        "//jumbf:test_utils",
        "//testing:jumbf_utils",
        "//uuid",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@googletest//:gtest_main",
    ],
)

cc_library(
    name = "claim_cbor_encoder",
    srcs = ["claim_cbor_encoder.cc"],
    hdrs = ["claim_cbor_encoder.h"],
    deps = [
        "//cbor",
        "//proto:manifest_cbor_proto",
        "//proto:manifest_cc_proto",
        "@abseil-cpp//absl/base:no_destructor",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:statusor",
    ],
)

cc_library(
    name = "validator",
    srcs = ["validator.cc"],
    hdrs = ["validator.h"],
    deps = [
        "//cbor",
        "//cbor:parse",
        "//constants:labels",
        "//constants:status_codes",
        "//cose:verifier",
        "//jumbf:box",
        "//proto:assertion_cc_proto",
        "//proto:cose_verification_result_cc_proto",
        "//proto:generator_info_cbor_proto",
        "//proto:generator_info_cc_proto",
        "//proto:hashed_uri_cc_proto",
        "//proto:manifest_cc_proto",
        "//proto:signature_info_cc_proto",
        "//uuid",
        "//validator:tracker",
        "@abseil-cpp//absl/log",
        "@abseil-cpp//absl/log:die_if_null",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
        "@abseil-cpp//absl/types:span",
    ],
)

cc_test(
    name = "validator_test",
    srcs = ["validator_test.cc"],
    deps = [
        ":validator",
        "//constants:labels",
        "//constants:status_codes",
        "//jumbf:box_builder",
        "//jumbf:constants",
        "//jumbf:encode_params",
        "//proto:cose_verification_result_cc_proto",
        "//proto:manifest_cc_proto",
        "//proto:signature_info_cc_proto",
        "//testing:cbor_utils",
        "//testing:jumbf_utils",
        "//testing:mock_cose_verifier",
        "//testing:proto_test_utils",
        "//testing:test_validation_tracker",
        "//uuid",
        "//validator:tracker",
        "@abseil-cpp//absl/log:check",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:cord",
        "@googletest//:gtest_main",
    ],
)
