// Copyright 2021 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.mediastreams;

/// The maximum size of an `EncryptionScheme` string.
const MAX_ENCRYPTION_SCHEME_SIZE int64 = 4;

/// The maximum size of a `EncryptionKeyId` blob.
const MAX_KEY_ID_SIZE int64 = 16;

/// The maximum size of a `EncryptionInitVector` blob.
const MAX_INIT_VECTOR_SIZE int64 = 16;

/// Identifies an encryption scheme.
alias EncryptionScheme = string:MAX_ENCRYPTION_SCHEME_SIZE;
const ENCRYPTION_SCHEME_CENC string = "cenc";
const ENCRYPTION_SCHEME_CBC1 string = "cbc1";
const ENCRYPTION_SCHEME_CENS string = "cens";
const ENCRYPTION_SCHEME_CBCS string = "cbcs";
alias EncryptionKeyId = bytes:MAX_KEY_ID_SIZE;
alias EncryptionInitVector = bytes:MAX_INIT_VECTOR_SIZE;

type EncryptionSubsampleEntry = struct {
    clear_bytes uint32;
    encrypted_bytes uint32;
};

type EncryptionPattern = struct {
    clear_blocks uint32;
    encrypted_blocks uint32;
};

type Encryption = struct {
    scheme EncryptionScheme;
    default_key_id EncryptionKeyId:optional;
    default_init_vector EncryptionInitVector:optional;
    default_pattern box<EncryptionPattern>;
};
