// Copyright (C) 2014 The Android Open Source Project
//
// 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
//
//      http://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.

// libkeymaster_messages contains just the code necessary to communicate with a
// AndroidKeymaster implementation, e.g. one running in TrustZone.
cc_library_shared {
    name: "libkeymaster_messages",
    vendor_available: true,
    vndk: {
        enabled: true,
    },
    srcs: [
        "android_keymaster_messages.cpp",
        "android_keymaster_utils.cpp",
        "authorization_set.cpp",
        "keymaster_tags.cpp",
        "logger.cpp",
        "serializable.cpp",
        "keymaster_stl.cpp",
    ],
    header_libs: ["libhardware_headers"],
    cflags: [
        "-Wall",
        "-Werror",
        "-Wunused",
        "-DKEYMASTER_NAME_TAGS",
    ],
    stl: "none",
    clang: true,
    // TODO(krasin): reenable coverage flags, when the new Clang toolchain is released.
    // Currently, if enabled, these flags will cause an internal error in Clang.
    clang_cflags: ["-fno-sanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp"],

    export_include_dirs: ["include"],
    sanitize: {
        integer_overflow: false,
    },
}

// libkeymaster_portable contains almost everything needed for a keymaster
// implementation, lacking only a subclass of the (abstract) KeymasterContext
// class to provide environment-specific services and a wrapper to translate from
// the function-based keymaster HAL API to the message-based AndroidKeymaster API.
cc_library_shared {
    name: "libkeymaster_portable",
    vendor_available: true,
    vndk: {
        enabled: true,
    },
    srcs: [
        "aes_key.cpp",
        "aes_operation.cpp",
        "android_keymaster.cpp",
        "android_keymaster_messages.cpp",
        "android_keymaster_utils.cpp",
        "asymmetric_key.cpp",
        "asymmetric_key_factory.cpp",
        "attestation_record.cpp",
        "auth_encrypted_key_blob.cpp",
        "authorization_set.cpp",
        "ecdsa_operation.cpp",
        "ec_key.cpp",
        "ec_key_factory.cpp",
        "hmac_key.cpp",
        "hmac_operation.cpp",
        "key.cpp",
        "keymaster_enforcement.cpp",
        "keymaster_tags.cpp",
        "logger.cpp",
        "ocb.c",
        "ocb_utils.cpp",
        "openssl_err.cpp",
        "openssl_utils.cpp",
        "operation.cpp",
        "operation_table.cpp",
        "rsa_key.cpp",
        "rsa_key_factory.cpp",
        "rsa_operation.cpp",
        "serializable.cpp",
        "symmetric_key.cpp",
        "keymaster_stl.cpp",
    ],

    shared_libs: [
        "libcrypto",
        "libkeymaster_messages",
    ],
    header_libs: ["libhardware_headers"],
    export_header_lib_headers: ["libhardware_headers"],
    cflags: [
        "-Wall",
        "-Werror",
        "-Wunused",
        "-DBORINGSSL_NO_CXX",
    ],
    // NOTE: libkeymaster_portable must run unchanged in the trusty runtime environment.
    // Therefore, it must not link against any c++ stl library. keymaster_stl.cpp
    // weakly defines the subset of stl symbols required for this library to work
    // and which are also available in the trusty context.
    stl: "none",
    clang: true,
    clang_cflags: [
        "-Wno-error=unused-const-variable",
        "-Wno-error=unused-private-field",
        // TODO(krasin): reenable coverage flags, when the new Clang toolchain is released.
        // Currently, if enabled, these flags will cause an internal error in Clang.
        "-fno-sanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp"
    ],

    export_include_dirs: ["include"],

    sanitize: {
        integer_overflow: false,
    },
}

// libkeymaster_staging adds to libkeymaster_portable code that is needed by the softkeymaster device
// to implement keymaster. This is sort of a staging area for functionality that may move
// to libkeymaster_portalbe eventually. Unlike libkeymaster_portable, this library can use c++ stl
// headers, but modules should avoid it if they are to be moved to libkeymaster_portable.
cc_library_shared {
    name: "libkeymaster_staging",
    vendor_available: true,
    vndk: {
        enabled: true,
    },
    srcs: [
        "ecies_kem.cpp",
        "hkdf.cpp",
        "hmac.cpp",
        "integrity_assured_key_blob.cpp",
        "iso18033kdf.cpp",
        "kdf.cpp",
        "nist_curve_key_exchange.cpp",
    ],

    shared_libs: [
        "libcrypto",
        "libkeymaster_portable",
        "libkeymaster_messages",
    ],
    cflags: [
        "-Wall",
        "-Werror",
        "-Wunused",
    ],
    clang: true,
    clang_cflags: [
        "-Wno-error=unused-const-variable",
        "-Wno-error=unused-private-field",
        // TODO(krasin): reenable coverage flags, when the new Clang toolchain is released.
        // Currently, if enabled, these flags will cause an internal error in Clang.
        "-fno-sanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp"
    ],

    export_include_dirs: ["include"],

}

// libsoftkeymaster provides a software-based keymaster HAL implementation.
// This is used by keystore as a fallback for when the hardware keymaster does
// not support the request.
cc_library {
    name: "libsoftkeymasterdevice",
    vendor_available: true,
    vndk: {
        enabled: true,
    },
    srcs: [
        "ec_keymaster0_key.cpp",
        "ec_keymaster1_key.cpp",
        "ecdsa_keymaster1_operation.cpp",
        "keymaster0_engine.cpp",
        "keymaster1_engine.cpp",
        "keymaster_configuration.cpp",
        "rsa_keymaster0_key.cpp",
        "rsa_keymaster1_key.cpp",
        "rsa_keymaster1_operation.cpp",
        "soft_keymaster_context.cpp",
        "soft_keymaster_device.cpp",
        "soft_keymaster_logger.cpp",
    ],
    include_dirs: ["system/security/keystore"],
    cflags: [
        "-Wall",
        "-Werror",
        "-Wunused",
    ],
    clang: true,
    clang_cflags: [
        "-Wno-error=unused-const-variable",
        "-Wno-error=unused-private-field",
        // TODO(krasin): reenable coverage flags, when the new Clang toolchain is released.
        // Currently, if enabled, these flags will cause an internal error in Clang.
        "-fno-sanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp"
    ],

    shared_libs: [
        "libkeymaster_messages",
        "libkeymaster_portable",
        "libkeymaster_staging",
        "liblog",
        "libcrypto",
        "libcutils",
    ],

    export_include_dirs: ["include"],
}

// libkeymasterfiles is an empty library that exports all of the files in keymaster as includes.
cc_library_static {
    name: "libkeymasterfiles",
    export_include_dirs: [
        ".",
        "include",
    ],
}
