
# Copyright 2024 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("@crate_index//:defs.bzl", "aliases")
load("@rules_rust//rust:defs.bzl", "rust_library")

cc_library(
    name = "ldt_np_adv_ffi",
    hdrs = ["nearby/presence/ldt_np_adv_ffi/c/include/np_ldt.h"],
    includes = ["nearby/presence/ldt_np_adv_ffi/c/include"],
    visibility = ["//visibility:public"],
    deps = [":ldt_np_adv_ffi_rust"],
)

cc_library(
    name = "np_cpp_ffi",
    srcs = ["nearby/presence/np_cpp_ffi/nearby_protocol.cc"],
    hdrs = ["nearby/presence/np_cpp_ffi/include/nearby_protocol.h"],
    includes = [
        "nearby/presence/np_c_ffi/include/cpp",
        "nearby/presence/np_cpp_ffi/include",
    ],
    visibility = ["//visibility:public"],
    deps = [
        ":np_c_ffi",
        "@com_google_absl//absl/status",
        "@com_google_absl//absl/status:statusor",
        "@com_google_absl//absl/strings",
        "@com_google_absl//absl/strings:str_format",
    ],
)

cc_library(
    name = "np_c_ffi_types",
    hdrs = ["nearby/presence/np_c_ffi/include/cpp/np_cpp_ffi_types.h"],
    includes = ["nearby/presence/np_c_ffi/include/cpp/"],
    visibility = ["//visibility:public"],
)

cc_binary(
    name = "np_cpp_sample",
    srcs = ["nearby/presence/np_cpp_ffi/sample/main.cc"],
    deps = [
        ":np_c_ffi_types",
        ":np_cpp_ffi",
        "@com_google_absl//absl/strings",
    ],
)

cc_library(
    name = "np_c_ffi",
    hdrs = [
        "nearby/presence/np_c_ffi/include/cpp/np_cpp_ffi_functions.h",
        "nearby/presence/np_c_ffi/include/cpp/np_cpp_ffi_types.h",
    ],
    includes = ["nearby/presence/np_cpp_ffi/include/cpp"],
    deps = [":np_c_ffi_rust"],
)

rust_library(
    name = "np_c_ffi_rust",
    srcs = glob(include = ["nearby/presence/np_c_ffi/src/**/*.rs"]),
    crate_features = ["std"],
    deps = [
        ":lock_adapter",
        ":np_ffi_core",
    ],
)

rust_library(
    name = "np_ffi_core",
    srcs = glob(include = ["nearby/presence/np_ffi_core/src/**/*.rs"]),
    crate_features = ["crypto_provider/raw_private_key_permit"],
    proc_macro_deps = ["@crate_index//:strum_macros"],
    deps = [
        ":array_view",
        ":crypto_provider",
        ":crypto_provider_default",
        ":handle_map",
        ":ldt_np_adv",
        ":lock_adapter",
        ":np_adv",
        ":np_adv_dynamic",
        ":np_hkdf",
        "@crate_index//:lazy_static",
        "@crate_index//:strum",
    ],
)

rust_library(
    name = "np_adv_dynamic",
    srcs = glob(include = ["nearby/presence/np_adv_dynamic/src/**/*.rs"]),
    deps = [
        ":array_view",
        ":crypto_provider",
        ":np_adv",
        ":sink",
        "@crate_index//:thiserror",
    ],
)

rust_library(
    name = "handle_map",
    srcs = glob(include = ["common/handle_map/src/**/*.rs"]),
    deps = [":lock_adapter"],
)

rust_library(
    name = "lock_adapter",
    srcs = glob(include = ["common/lock_adapter/src/**/*.rs"]),
    crate_features = ["std"],
)

rust_library(
    name = "np_adv",
    srcs = glob(include = ["nearby/presence/np_adv/src/**/*.rs"]),
    crate_features = ["alloc"],
    proc_macro_deps = ["@crate_index//:strum_macros"],
    deps = [
        ":array_view",
        ":crypto_provider",
        ":ldt",
        ":ldt_np_adv",
        ":np_ed25519",
        ":np_hkdf",
        ":sink",
        ":xts_aes",
        "@crate_index//:lazy_static",
        "@crate_index//:nom",
        "@crate_index//:strum",
        "@crate_index//:tinyvec",
    ],
)

rust_library(
    name = "np_ed25519",
    srcs = glob(
        include = ["nearby/presence/np_ed25519/src/**/*.rs"],
    ),
    deps = [
        ":array_view",
        ":crypto_provider",
        ":ldt",
        ":sink",
        ":xts_aes",
        "@crate_index//:tinyvec",
    ],
)

cc_binary(
    name = "main",
    srcs = ["nearby/presence/ldt_np_adv_ffi/c/sample/main.c"],
    deps = [":ldt_np_adv_ffi"],
)

rust_library(
    name = "ldt_np_adv_ffi_rust",
    srcs = glob(["nearby/presence/ldt_np_adv_ffi/src/**/*.rs"]),
    crate_features = ["std"],
    deps = [
        ":crypto_provider",
        ":crypto_provider_default",
        ":ldt",
        ":ldt_np_adv",
        ":np_hkdf",
        "@crate_index//:cfg-if",
        "@crate_index//:lazy_static",
    ],
)

rust_library(
    name = "ldt_np_adv",
    srcs = glob(["nearby/presence/ldt_np_adv/src/**/*.rs"]),
    deps = [
        ":array_view",
        ":crypto_provider",
        ":ldt",
        ":np_hkdf",
        ":xts_aes",
    ],
)

rust_library(
    name = "np_hkdf",
    srcs = glob(["nearby/presence/np_hkdf/src/**/*.rs"]),
    deps = [
        ":crypto_provider",
        ":ldt",
        ":xts_aes",
    ],
)

rust_library(
    name = "crypto_provider",
    srcs = glob(["nearby/crypto/crypto_provider/src/**/*.rs"]),
    crate_features = [
        "raw_private_key_permit",
        "std",
        "alloc",
    ],
    deps = ["@crate_index//:tinyvec"],
)

rust_library(
    name = "crypto_provider_default",
    srcs = glob(["nearby/crypto/crypto_provider_default/src/**/*.rs"]),
    crate_features = [
        "rustcrypto",
        "std",
    ],
    deps = [
        ":crypto_provider",
        ":crypto_provider_rustcrypto",
        "@crate_index//:cfg-if",
    ],
)

rust_library(
    name = "crypto_provider_rustcrypto",
    srcs = glob(["nearby/crypto/crypto_provider_rustcrypto/src/**/*.rs"]),
    crate_features = [
        "std",
        "alloc",
    ],
    deps = [
        ":crypto_provider",
        "@crate_index//:aead",
        "@crate_index//:aes",
        "@crate_index//:aes-gcm",
        "@crate_index//:aes-gcm-siv",
        "@crate_index//:cbc",
        "@crate_index//:cfg-if",
        "@crate_index//:ctr",
        "@crate_index//:ed25519-dalek",
        "@crate_index//:hkdf",
        "@crate_index//:hmac",
        "@crate_index//:p256",
        "@crate_index//:rand",
        "@crate_index//:rand_chacha",
        "@crate_index//:rand_core",
        "@crate_index//:sec1",
        "@crate_index//:sha2",
        "@crate_index//:subtle",
        "@crate_index//:x25519-dalek",
    ],
)

rust_library(
    name = "ldt_tbc",
    srcs = glob(["nearby/presence/ldt_tbc/src/**/*.rs"]),
    deps = [":crypto_provider"],
)

rust_library(
    name = "ldt",
    srcs = glob(["nearby/presence/ldt/src/**/*.rs"]),
    deps = [
        ":crypto_provider",
        ":ldt_tbc",
    ],
)

rust_library(
    name = "xts_aes",
    srcs = glob(["nearby/presence/xts_aes/src/**/*.rs"]),
    deps = [
        ":array_ref",
        ":crypto_provider",
        ":ldt_tbc",
    ],
)

rust_library(
    name = "array_view",
    srcs = glob(["nearby/presence/array_view/src/**/*.rs"]),
)

rust_library(
    name = "array_ref",
    srcs = glob(["nearby/presence/array_ref/src/**/*.rs"]),
)

rust_library(
    name = "sink",
    srcs = glob(["nearby/presence/sink/src/**/*.rs"]),
    deps = ["@crate_index//:tinyvec"],
)
