/*
 * Copyright (C) 2022 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.
 */

syntax = "proto2";

package android.media.drm;

// Please see MediaDrm.ErrorCodes for definitions.
//
// Extended from
//   frameworks/base/media/java/android/media/MediaDrm.java
enum Status {
    ERROR_UNKNOWN = 0;
    ERROR_NO_KEY = 1;
    ERROR_KEY_EXPIRED = 2;
    ERROR_RESOURCE_BUSY = 3;
    ERROR_INSUFFICIENT_OUTPUT_PROTECTION = 4;
    ERROR_SESSION_NOT_OPENED = 5;
    ERROR_UNSUPPORTED_OPERATION = 6;
    ERROR_INSUFFICIENT_SECURITY = 7;
    ERROR_FRAME_TOO_LARGE = 8;
    ERROR_LOST_STATE = 9;
    ERROR_CERTIFICATE_MALFORMED = 10;
    ERROR_CERTIFICATE_MISSING = 11;
    ERROR_CRYPTO_LIBRARY = 12;
    ERROR_GENERIC_OEM = 13;
    ERROR_GENERIC_PLUGIN = 14;
    ERROR_INIT_DATA = 15;
    ERROR_KEY_NOT_LOADED = 16;
    ERROR_LICENSE_PARSE = 17;
    ERROR_LICENSE_POLICY = 18;
    ERROR_LICENSE_RELEASE = 19;
    ERROR_LICENSE_REQUEST_REJECTED = 20;
    ERROR_LICENSE_RESTORE = 21;
    ERROR_LICENSE_STATE = 22;
    ERROR_MEDIA_FRAMEWORK = 23;
    ERROR_PROVISIONING_CERTIFICATE = 24;
    ERROR_PROVISIONING_CONFIG = 25;
    ERROR_PROVISIONING_PARSE = 26;
    ERROR_PROVISIONING_REQUEST_REJECTED = 27;
    ERROR_PROVISIONING_RETRY = 28;
    ERROR_RESOURCE_CONTENTION = 29;
    ERROR_SECURE_STOP_RELEASE = 30;
    ERROR_STORAGE_READ = 31;
    ERROR_STORAGE_WRITE = 32;
    ERROR_ZERO_SUBSAMPLES = 33;
    ERROR_INVALID_STATE = 34;
    ERROR_BAD_VALUE = 35;
    ERROR_NOT_PROVISIONED = 36;
    ERROR_DEVICE_REVOKED = 37;
    ERROR_DECRYPT = 38;
    ERROR_DEAD_OBJECT = 39;
}

// Security level represents the robustness of the DRM implementation.
//
// From
//   frameworks/base/media/java/android/media/MediaDrm.java
enum SecurityLevel {
    /**
     * The DRM plugin did not report a security level, or an error occurred
     * accessing it
     */
    SECURITY_LEVEL_UNKNOWN = 0;

    /**
     * DRM key management uses software-based whitebox crypto.
     */
    SECURITY_LEVEL_SW_SECURE_CRYPTO = 1;

    /**
     * DRM key management and decoding use software-based whitebox crypto.
     */
    SECURITY_LEVEL_SW_SECURE_DECODE = 2;

    /**
     * DRM key management and crypto operations are performed within a hardware
     * backed trusted execution environment.
     */
    SECURITY_LEVEL_HW_SECURE_CRYPTO = 3;

    /**
     * DRM key management, crypto operations and decoding of content are
     * performed within a hardware backed trusted execution environment.
     */
    SECURITY_LEVEL_HW_SECURE_DECODE = 4;

    /**
     * DRM key management, crypto operations, decoding of content and all
     * handling of the media (compressed and uncompressed) is handled within a
     * hardware backed trusted execution environment.
     */
    SECURITY_LEVEL_HW_SECURE_ALL = 5;

    /**
     * Indicates that the maximum security level supported by the device should
     * be used when opening a session. This is the default security level
     * selected when a session is opened.
     */
    SECURITY_LEVEL_MAX = 6;
}

// DrmApi represents methods of the IDrm interface.
//
// From
//   frameworks/av/drm/libmediadrm/include/mediadrm/IDrm.h
enum DrmApi {
    DRM_API_UNKNOWN = 0;
    DRM_API_INIT_CHECK = 1;
    DRM_API_IS_CRYPTO_SCHEME_SUPPORTED = 2;
    DRM_API_CREATE_PLUGIN = 3;
    DRM_API_DESTROY_PLUGIN = 4;
    DRM_API_OPEN_SESSION = 5;
    DRM_API_CLOSE_SESSION = 6;
    DRM_API_GET_KEY_REQUEST = 7;
    DRM_API_PROVIDE_KEY_RESPONSE = 8;
    DRM_API_REMOVE_KEYS = 9;
    DRM_API_RESTORE_KEYS = 10;
    DRM_API_QUERY_KEY_STATUS = 11;
    DRM_API_GET_PROVISION_REQUEST = 12;
    DRM_API_PROVIDE_PROVISION_RESPONSE = 13;
    DRM_API_GET_SECURE_STOPS = 14;
    DRM_API_GET_SECURE_STOP_IDS = 15;
    DRM_API_GET_SECURE_STOP = 16;
    DRM_API_RELEASE_SECURE_STOPS = 17;
    DRM_API_REMOVE_SECURE_STOP = 18;
    DRM_API_REMOVE_ALL_SECURE_STOPS = 19;
    DRM_API_GET_HDCP_LEVELS = 20;
    DRM_API_GET_NUMBER_OF_SESSIONS = 21;
    DRM_API_GET_SECURITY_LEVEL = 22;
    DRM_API_GET_OFFLINE_LICENSE_KEY_SET_IDS = 23;
    DRM_API_REMOVE_OFFLINE_LICENSE = 24;
    DRM_API_GET_OFFLINE_LICENSE_STATE = 25;
    DRM_API_GET_PROPERTY_STRING = 26;
    DRM_API_GET_PROPERTY_BYTE_ARRAY = 27;
    DRM_API_SET_PROPERTY_STRING = 28;
    DRM_API_SET_PROPERTY_BYTE_ARRAY = 29;
    DRM_API_GET_METRICS = 30;
    DRM_API_SET_CIPHER_ALGORITHM = 31;
    DRM_API_SET_MAC_ALGORITHM = 32;
    DRM_API_GENERIC_ENCRYPT = 33;
    DRM_API_GENERIC_DECRYPT = 34;
    DRM_API_GENERIC_SIGN = 35;
    DRM_API_GENERIC_VERIFY = 36;
    DRM_API_SIGN_RSA = 37;
    DRM_API_SET_LISTENER = 38;
    DRM_API_REQUIRES_SECURE_DECODER = 39;
    DRM_API_REQUIRES_SECURE_DECODER_LEVEL = 40;
    DRM_API_SET_PLAYBACK_ID = 41;
    DRM_API_GET_LOG_MESSAGES = 42;
    DRM_API_GET_SUPPORTED_SCHEMES = 43;
}

// Which library was used to access DRM features.
//
// From
//   frameworks/av/drm/libmediadrm/include/mediadrm/IDrm.h
enum IDrmFrontend {
    IDRM_UNKNOWN = 0;
    IDRM_JNI = 1;      // MediaDrm
    IDRM_NDK = 2;      // NdkMediaDrm
    IDRM_NUPLAYER = 3; // MediaPlayer
}

// Content protection scheme.
//
// From https://dashif.org/identifiers/content_protection/
enum DrmScheme {
    DRM_SCHEME_OTHER = -1;
    DRM_SCHEME_UNKNOWN = 0;
    ABV_MODRM = 1;
    ADOBE_PRIMETIME = 2;
    ALTICAST = 3;
    APPLE_FAIRPLAY = 4;
    ARRIS_TITANIUM = 5;
    CHINADRM = 6;
    CLEAR_KEY_AES_128 = 7;
    CLEAR_KEY_SAMPLE_AES = 8;
    CLEAR_KEY_DASH_IF = 9;
    CMLA_OMA = 10;
    COMMSCOPE_TITANIUM = 11;
    CORECRYPT = 12;
    DIGICAP_SMARTXESS = 13;
    DIVX = 14;
    IRDETO = 15;
    MARLIN = 16;
    MICROSOFT_PLAYREADY = 17;
    MOBITV = 18;
    NAGRA_MEDIAACCESS = 19;
    SECUREMEDIA = 20;
    SECUREMEDIA_STEELKNOT = 21;
    SYNAMEDIA_VIDEOGUARD = 22;
    UNITEND_UDRM = 23;
    VERIMATRIX_VCAS = 24;
    VIACCESS_ORCA = 25;
    VISIONCRYPT = 26;
    W3C_COMMON = 27;
    WIDEVINE = 28;
}
