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

// This file is generated by net/tools/transport_security_state_generator/.
// See transport_security_state_static.template for more information on the data
// in this file.

// Cobalt copied this file from Chromium directly.

#include "base/stl_util.h"
#include "net/http/transport_security_state_source.h"
#include "starboard/types.h"

static const char kSPKIHash_TestSPKI1[] =
    "\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01"
    "\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01";

static const char kSPKIHash_TestSPKI2[] =
    "\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02"
    "\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02";

static const char* const kExpectCTReportURIs[] = {
    nullptr,
};

static const char* const kNoRejectedPublicKeys[] = {
    NULL,
};

static const char* const kTest1AcceptableCerts[] = {
    kSPKIHash_TestSPKI1, nullptr,
};
static const char* const kTest1RejectedCerts[] = {
    kSPKIHash_TestSPKI2, nullptr,
};

static const char* const kTest2AcceptableCerts[] = {
    kSPKIHash_TestSPKI2, nullptr,
};

static const struct net::TransportSecurityStateSource::Pinset kPinsets[] = {
    {kTest1AcceptableCerts, kTest1RejectedCerts, kNoReportURI},
    {kTest2AcceptableCerts, kNoRejectedPublicKeys, kNoReportURI},
};

static const uint8_t kHSTSHuffmanTree[] = {
    0x80, 0xe1, 0x00, 0xae, 0xec, 0xef, 0xe3, 0xe8, 0x02,
    0x03, 0x01, 0x04, 0xf8, 0xff, 0xf0, 0xf4, 0x06, 0x07,
    0xe5, 0xed, 0xf3, 0x09, 0x08, 0x0a, 0x05, 0x0b,
};

static const uint8_t kPreloadedHSTSData[] = {
    0xff, 0xff, 0x7a, 0xb1, 0xe4, 0xaf, 0x18, 0xe3, 0xaf, 0x38, 0x38, 0x24,
};

static const unsigned kPreloadedHSTSBits = 94;
static const unsigned kHSTSRootPosition = 0;

static const net::TransportSecurityStateSource kHSTSSource = {
    kHSTSHuffmanTree,   sizeof(kHSTSHuffmanTree), kPreloadedHSTSData,
    kPreloadedHSTSBits, kHSTSRootPosition,        kExpectCTReportURIs,
    kPinsets,           base::size(kPinsets)};