// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_WEB_PACKAGE_SIGNED_WEB_BUNDLES_CONSTANTS_H_
#define COMPONENTS_WEB_PACKAGE_SIGNED_WEB_BUNDLES_CONSTANTS_H_

#include <array>
#include <cstdint>
#include <string_view>

namespace web_package {

// The V2 integrity block is a CBOR array with four entries:
//  * Magic Bytes
//  * Version
//  * Attributes
//  * Signature Stack
inline constexpr uint32_t kIntegrityBlockV2TopLevelArrayLength = 4;

inline constexpr std::array<uint8_t, 8> kIntegrityBlockMagicBytes = {
    // "🖋📦" magic bytes (in UTF-8)
    0xF0, 0x9F, 0x96, 0x8B, 0xF0, 0x9F, 0x93, 0xA6};

// [DEPRECATED, here only for error detecting] Version V1: "1b\0\0".
inline constexpr std::array<uint8_t, 4> kIntegrityBlockV1VersionBytes = {
    '1', 'b', 0x00, 0x00};

// Version V2: "2b\0\0".
inline constexpr std::array<uint8_t, 4> kIntegrityBlockV2VersionBytes = {
    '2', 'b', 0x00, 0x00};

// CBOR attribute name for web bundle ID.
inline constexpr std::string_view kWebBundleIdAttributeName = "webBundleId";

// CBOR attribute name for Ed25519 public keys.
inline constexpr std::string_view kEd25519PublicKeyAttributeName =
    "ed25519PublicKey";

// CBOR attribute name for ECDSA P-256 SHA-256 public keys.
inline constexpr std::string_view kEcdsaP256PublicKeyAttributeName =
    "ecdsaP256SHA256PublicKey";

// The maximum size of the integrity block allowed in this implementation.
inline constexpr uint64_t kMaxIntegrityBlockSize = 1 * 1024 * 1024;

}  // namespace web_package

#endif  // COMPONENTS_WEB_PACKAGE_SIGNED_WEB_BUNDLES_CONSTANTS_H_
