// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.media.drm;

type Features = strict bits : uint32 {
    /// All key management and crypto operations are performed in a hardware
    /// based trusted execution environment. If not set, a software
    /// implementation is used.
    HARDWARE_CRYPTO = 0x01;
    /// Decrypted data can be written to hardware secure buffers.
    SECURE_OUTPUT = 0x02;
};

type Requirement = strict enum {
    NOT_SUPPORTED = 1;
    OPTIONAL = 2;
    REQUIRED = 3;
};

type KeySystemProperties = table {
    /// Various flags indicating supported features of the [`KeySystem`]. This
    /// field is required.
    1: features Features;

    /// Indicates the data store requirements of the [`KeySystem`].
    ///
    /// See [`KeySystem.ContentDecryptionModule2`] for implications of different
    /// values. This field is required.
    2: data_store_requirement Requirement;

    /// Indicates the supported license session types. This field is required
    /// and the list must not be empty.
    3: license_session_types vector<LicenseSessionType>:MAX;

    /// Indicates the supported init data types. This field is required and the
    /// list must not be empty.
    4: init_data_types vector<LicenseInitDataType>:MAX;

    /// Indicates the supported encryption schemes. This field is required and
    /// the list must not be empty.
    5: encryption_schemes vector<EncryptionScheme>:MAX;
};
