/*
 *
 *    Copyright (c) 2019 Google LLC.
 *    Copyright (c) 2016-2017 Nest Labs, Inc.
 *    All rights reserved.
 *
 *    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.
 */

/**
 *    @file
 *      This file contains definitions of test certificates used by various unit tests.
 *
 */

#include "ToolCommon.h"
#include <Weave/Core/WeaveCore.h>
#include <Weave/Core/WeaveTLV.h>
#include <Weave/Profiles/security/WeaveSecurity.h>
#include <Weave/Profiles/security/WeaveCert.h>

#include "TestWeaveCertData.h"

namespace nl {
namespace TestCerts {

using namespace nl::Weave::Profiles::Security;


extern const int gTestCerts[] =
{
    kTestCert_Root,
    kTestCert_Root_SHA256,
    kTestCert_CA,
    kTestCert_CA_SHA256,
    kTestCert_Dev,
    kTestCert_Dev_SHA256,
    kTestCert_SelfSigned,
    kTestCert_SelfSigned_SHA256,
    kTestCert_ServiceEndpoint,
    kTestCert_ServiceEndpoint_SHA256,
    kTestCert_FirmwareSigning,
    kTestCert_FirmwareSigning_SHA256,
};

extern const size_t gNumTestCerts = sizeof(gTestCerts) / sizeof(gTestCerts[0]);

void GetTestCert(int selector, const uint8_t *& certData, size_t& certDataLen)
{
    bool derForm = (selector & kTestCertLoadFlag_DERForm) != 0;

    selector = (selector & kTestCert_Mask);

#define SELECT_CERT(NAME)                                       \
    do {                                                        \
        if (selector == kTestCert_##NAME)                       \
        {                                                       \
            if (derForm)                                        \
            {                                                   \
                certData = sTestCert_##NAME##_DER;              \
                certDataLen = sTestCertLength_##NAME##_DER;     \
            }                                                   \
            else                                                \
            {                                                   \
                certData = sTestCert_##NAME##_Weave;            \
                certDataLen = sTestCertLength_##NAME##_Weave;   \
            }                                                   \
            return;                                             \
        }                                                       \
    } while (0)                                                 \

    SELECT_CERT(Root);
    SELECT_CERT(Root_SHA256);
    SELECT_CERT(CA);
    SELECT_CERT(CA_SHA256);
    SELECT_CERT(Dev);
    SELECT_CERT(Dev_SHA256);
    SELECT_CERT(SelfSigned);
    SELECT_CERT(SelfSigned_SHA256);
    SELECT_CERT(ServiceEndpoint);
    SELECT_CERT(ServiceEndpoint_SHA256);
    SELECT_CERT(FirmwareSigning);
    SELECT_CERT(FirmwareSigning_SHA256);

    fprintf(stderr, "Unknown test certificate requested: %08X\n", selector);
    exit(-1);
}

const char *GetTestCertName(int selector)
{
    selector = (selector & kTestCert_Mask);

#define NAME_CERT(NAME)                                         \
    do {                                                        \
        if (selector == kTestCert_##NAME)                       \
        {                                                       \
            return #NAME;                                       \
        }                                                       \
    } while (0)                                                 \

    NAME_CERT(Root);
    NAME_CERT(Root_SHA256);
    NAME_CERT(CA);
    NAME_CERT(CA_SHA256);
    NAME_CERT(Dev);
    NAME_CERT(Dev_SHA256);
    NAME_CERT(SelfSigned);
    NAME_CERT(SelfSigned_SHA256);
    NAME_CERT(ServiceEndpoint);
    NAME_CERT(ServiceEndpoint_SHA256);
    NAME_CERT(FirmwareSigning);
    NAME_CERT(FirmwareSigning_SHA256);

    fprintf(stderr, "Unknown test certificated requested: %08X\n", selector);
    exit(-1);

    return NULL;
}

void LoadTestCert(WeaveCertificateSet& certSet, int selector)
{
    WEAVE_ERROR err;
    WeaveCertificateData *cert;
    EncodedECPublicKey rootPubKey;
    const uint8_t *certData;
    size_t certDataLen;

    // Special case for loading the root public key only.
    if ((selector & kTestCert_Mask) == kTestCert_RootKey)
    {
        // Add the trusted root key to the certificate set.
        rootPubKey.ECPoint = (uint8_t *)sTestCert_Root_PublicKey;
        rootPubKey.ECPointLen = sTestCertLength_Root_PublicKey;
        err = certSet.AddTrustedKey(sTestCert_Root_Id, sTestCert_Root_CurveId, rootPubKey, sTestCert_Root_SubjectKeyId, sTestCertLength_Root_SubjectKeyId);
        if (err != WEAVE_NO_ERROR)
        {
            fprintf(stderr, "WeaveCertificateSet::AddTrustedKey() failed: %s\n", ErrorStr(err));
            exit(-1);
        }
        return;
    }

    // Get the requested certificate data.
    GetTestCert(selector, certData, certDataLen);

    // Load it into the certificate set.
    err = certSet.LoadCert(certData, certDataLen, selector & kDecodeFlag_Mask, cert);
    if (err != WEAVE_NO_ERROR)
    {
        fprintf(stderr, "WeaveCertificateSet::LoadCert() failed: %s\n", ErrorStr(err));
        exit(-1);
    }

    // Apply load flags.
    if ((selector & kTestCertLoadFlag_SuppressIsCA) != 0)
        cert->CertFlags &= ~kCertFlag_IsCA;
    if ((selector & kTestCertLoadFlag_SuppressKeyUsage) != 0)
        cert->CertFlags &= ~kCertFlag_ExtPresent_KeyUsage;
    if ((selector & kTestCertLoadFlag_SuppressKeyCertSign) != 0)
        cert->KeyUsageFlags &= ~kKeyUsageFlag_KeyCertSign;
    if ((selector & kTestCertLoadFlag_SetPathLenConstZero) != 0)
    {
        cert->CertFlags |= kCertFlag_PathLenConstPresent;
        cert->PathLenConstraint = 0;
    }
    if ((selector & kTestCertLoadFlag_SetAppDefinedCertType) != 0)
    {
        cert->CertType = kCertType_AppDefinedBase;
    }
}


// ------------------------------ TEST CERTIFICATES ----------------------------------------

/*
    Root Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 4060277733184227728 (0x3859011607dfc990)
        Signature Algorithm: ecdsa-with-SHA1
            Issuer: 1.3.6.1.4.1.41387.1.3=18B430EEFF000001
            Validity
                Not Before: Apr 24 16:30:32 2016 GMT
                Not After : Apr 26 16:30:32 2026 GMT
            Subject: 1.3.6.1.4.1.41387.1.3=18B430EEFF000001
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (224 bit)
                    pub:
                        04:c1:a5:80:09:ee:2d:ce:5a:00:f7:c8:a2:cd:59:
                        ad:e6:6e:c9:c1:b0:86:a7:ff:41:5e:79:01:6f:21:
                        ed:ed:17:80:2a:4a:a0:ba:38:d1:e9:87:e3:7a:57:
                        1a:34:d0:e5:37:a5:24:c1:cb:5c:39:72
                    ASN1 OID: secp224r1
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:TRUE
                X509v3 Key Usage: critical
                    Certificate Sign, CRL Sign
                X509v3 Subject Key Identifier:
                    4D:98:12:4C:ED:DD:1E:1F
                X509v3 Authority Key Identifier:
                    keyid:4D:98:12:4C:ED:DD:1E:1F

        Signature Algorithm: ecdsa-with-SHA1
             30:3d:02:1d:00:be:3d:5d:a2:c9:d6:03:c2:e4:4d:2b:0c:c2:
             08:75:ab:7d:02:fb:d8:ce:99:35:2f:92:da:ec:6d:02:1c:64:
             ad:5c:60:d5:82:b1:5d:f8:99:63:23:17:be:6f:68:b2:9c:4c:
             b9:ff:a0:e6:d7:7d:42:53:1b

    -----BEGIN CERTIFICATE-----
    MIIBcDCCAR+gAwIBAgIIOFkBFgffyZAwCQYHKoZIzj0EATAiMSAwHgYKKwYBBAGC
    wysBAwwQMThCNDMwRUVGRjAwMDAwMTAeFw0xNjA0MjQxNjMwMzJaFw0yNjA0MjYx
    NjMwMzJaMCIxIDAeBgorBgEEAYLDKwEDDBAxOEI0MzBFRUZGMDAwMDAxME4wEAYH
    KoZIzj0CAQYFK4EEACEDOgAEwaWACe4tzloA98iizVmt5m7JwbCGp/9BXnkBbyHt
    7ReAKkqgujjR6YfjelcaNNDlN6UkwctcOXKjSzBJMA8GA1UdEwEB/wQFMAMBAf8w
    DgYDVR0PAQH/BAQDAgEGMBEGA1UdDgQKBAhNmBJM7d0eHzATBgNVHSMEDDAKgAhN
    mBJM7d0eHzAJBgcqhkjOPQQBA0AAMD0CHQC+PV2iydYDwuRNKwzCCHWrfQL72M6Z
    NS+S2uxtAhxkrVxg1YKxXfiZYyMXvm9ospxMuf+g5td9QlMb
    -----END CERTIFICATE-----

    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHBFSkiDziq6BEmPVovTClpbLkaOT8ycMt5dx5vSgBwYFK4EEACGhPAM6
    AATBpYAJ7i3OWgD3yKLNWa3mbsnBsIan/0FeeQFvIe3tF4AqSqC6ONHph+N6Vxo0
    0OU3pSTBy1w5cg==
    -----END EC PRIVATE KEY-----
*/

extern const uint8_t sTestCert_Root_Weave[] =
{
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x38, 0x59, 0x01, 0x16, 0x07, 0xdf,
    0xc9, 0x90, 0x24, 0x02, 0x04, 0x37, 0x03, 0x27, 0x13, 0x01, 0x00, 0x00, 0xff, 0xee, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x28, 0xb6, 0x40, 0x1f, 0x26, 0x05, 0x28, 0xa5, 0x6b, 0x32, 0x37, 0x06,
    0x27, 0x13, 0x01, 0x00, 0x00, 0xff, 0xee, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0xc1, 0xa5, 0x80, 0x09, 0xee, 0x2d, 0xce, 0x5a,
    0x00, 0xf7, 0xc8, 0xa2, 0xcd, 0x59, 0xad, 0xe6, 0x6e, 0xc9, 0xc1, 0xb0, 0x86, 0xa7, 0xff, 0x41,
    0x5e, 0x79, 0x01, 0x6f, 0x21, 0xed, 0xed, 0x17, 0x80, 0x2a, 0x4a, 0xa0, 0xba, 0x38, 0xd1, 0xe9,
    0x87, 0xe3, 0x7a, 0x57, 0x1a, 0x34, 0xd0, 0xe5, 0x37, 0xa5, 0x24, 0xc1, 0xcb, 0x5c, 0x39, 0x72,
    0x35, 0x83, 0x29, 0x01, 0x29, 0x02, 0x18, 0x35, 0x82, 0x29, 0x01, 0x24, 0x02, 0x60, 0x18, 0x35,
    0x81, 0x30, 0x02, 0x08, 0x4d, 0x98, 0x12, 0x4c, 0xed, 0xdd, 0x1e, 0x1f, 0x18, 0x35, 0x80, 0x30,
    0x02, 0x08, 0x4d, 0x98, 0x12, 0x4c, 0xed, 0xdd, 0x1e, 0x1f, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1d,
    0x00, 0xbe, 0x3d, 0x5d, 0xa2, 0xc9, 0xd6, 0x03, 0xc2, 0xe4, 0x4d, 0x2b, 0x0c, 0xc2, 0x08, 0x75,
    0xab, 0x7d, 0x02, 0xfb, 0xd8, 0xce, 0x99, 0x35, 0x2f, 0x92, 0xda, 0xec, 0x6d, 0x30, 0x02, 0x1c,
    0x64, 0xad, 0x5c, 0x60, 0xd5, 0x82, 0xb1, 0x5d, 0xf8, 0x99, 0x63, 0x23, 0x17, 0xbe, 0x6f, 0x68,
    0xb2, 0x9c, 0x4c, 0xb9, 0xff, 0xa0, 0xe6, 0xd7, 0x7d, 0x42, 0x53, 0x1b, 0x18, 0x18,
};

extern const size_t sTestCertLength_Root_Weave = sizeof(sTestCert_Root_Weave);

extern const uint8_t sTestCert_Root_DER[] =
{
    0x30, 0x82, 0x01, 0x70, 0x30, 0x82, 0x01, 0x1f, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x38,
    0x59, 0x01, 0x16, 0x07, 0xdf, 0xc9, 0x90, 0x30, 0x09, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x01, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82,
    0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30, 0x45, 0x45, 0x46, 0x46,
    0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x34, 0x32, 0x34,
    0x31, 0x36, 0x33, 0x30, 0x33, 0x32, 0x5a, 0x17, 0x0d, 0x32, 0x36, 0x30, 0x34, 0x32, 0x36, 0x31,
    0x36, 0x33, 0x30, 0x33, 0x32, 0x5a, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06,
    0x01, 0x04, 0x01, 0x82, 0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30,
    0x45, 0x45, 0x46, 0x46, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x4e, 0x30, 0x10, 0x06, 0x07,
    0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x21, 0x03, 0x3a,
    0x00, 0x04, 0xc1, 0xa5, 0x80, 0x09, 0xee, 0x2d, 0xce, 0x5a, 0x00, 0xf7, 0xc8, 0xa2, 0xcd, 0x59,
    0xad, 0xe6, 0x6e, 0xc9, 0xc1, 0xb0, 0x86, 0xa7, 0xff, 0x41, 0x5e, 0x79, 0x01, 0x6f, 0x21, 0xed,
    0xed, 0x17, 0x80, 0x2a, 0x4a, 0xa0, 0xba, 0x38, 0xd1, 0xe9, 0x87, 0xe3, 0x7a, 0x57, 0x1a, 0x34,
    0xd0, 0xe5, 0x37, 0xa5, 0x24, 0xc1, 0xcb, 0x5c, 0x39, 0x72, 0xa3, 0x4b, 0x30, 0x49, 0x30, 0x0f,
    0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30,
    0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30,
    0x11, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x0a, 0x04, 0x08, 0x4d, 0x98, 0x12, 0x4c, 0xed, 0xdd,
    0x1e, 0x1f, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x0c, 0x30, 0x0a, 0x80, 0x08, 0x4d,
    0x98, 0x12, 0x4c, 0xed, 0xdd, 0x1e, 0x1f, 0x30, 0x09, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x01, 0x03, 0x40, 0x00, 0x30, 0x3d, 0x02, 0x1d, 0x00, 0xbe, 0x3d, 0x5d, 0xa2, 0xc9, 0xd6,
    0x03, 0xc2, 0xe4, 0x4d, 0x2b, 0x0c, 0xc2, 0x08, 0x75, 0xab, 0x7d, 0x02, 0xfb, 0xd8, 0xce, 0x99,
    0x35, 0x2f, 0x92, 0xda, 0xec, 0x6d, 0x02, 0x1c, 0x64, 0xad, 0x5c, 0x60, 0xd5, 0x82, 0xb1, 0x5d,
    0xf8, 0x99, 0x63, 0x23, 0x17, 0xbe, 0x6f, 0x68, 0xb2, 0x9c, 0x4c, 0xb9, 0xff, 0xa0, 0xe6, 0xd7,
    0x7d, 0x42, 0x53, 0x1b,
};

extern const size_t sTestCertLength_Root_DER = sizeof(sTestCert_Root_DER);

extern const uint8_t sTestCert_Root_PublicKey[] =
{
    0x04, 0xc1, 0xa5, 0x80, 0x09, 0xee, 0x2d, 0xce, 0x5a, 0x00, 0xf7, 0xc8, 0xa2, 0xcd, 0x59,
    0xad, 0xe6, 0x6e, 0xc9, 0xc1, 0xb0, 0x86, 0xa7, 0xff, 0x41, 0x5e, 0x79, 0x01, 0x6f, 0x21,
    0xed, 0xed, 0x17, 0x80, 0x2a, 0x4a, 0xa0, 0xba, 0x38, 0xd1, 0xe9, 0x87, 0xe3, 0x7a, 0x57,
    0x1a, 0x34, 0xd0, 0xe5, 0x37, 0xa5, 0x24, 0xc1, 0xcb, 0x5c, 0x39, 0x72
};

extern const size_t sTestCertLength_Root_PublicKey = sizeof(sTestCert_Root_PublicKey);

extern const uint8_t sTestCert_Root_SubjectKeyId[] =
{
    0x4D, 0x98, 0x12, 0x4C, 0xED, 0xDD, 0x1E, 0x1F
};

extern const size_t sTestCertLength_Root_SubjectKeyId = sizeof(sTestCert_Root_SubjectKeyId);

extern const uint32_t sTestCert_Root_CurveId = nl::Weave::Profiles::Security::kWeaveCurveId_secp224r1;

extern const uint64_t sTestCert_Root_Id = 0x18B430EEFF000001ULL;

/*
    Root_SHA256 Certificate

    NOTE: This uses the same key as the Root certificate.

        Data:
            Version: 3 (0x2)
            Serial Number: 6350753190581876338 (0x582268610ccfb672)
        Signature Algorithm: ecdsa-with-SHA256
            Issuer: 1.3.6.1.4.1.41387.1.3=18B430EEFF000001
            Validity
                Not Before: Apr 24 16:30:32 2016 GMT
                Not After : Apr 24 16:30:31 2066 GMT
            Subject: 1.3.6.1.4.1.41387.1.3=18B430EEFF000001
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (224 bit)
                    pub:
                        04:c1:a5:80:09:ee:2d:ce:5a:00:f7:c8:a2:cd:59:
                        ad:e6:6e:c9:c1:b0:86:a7:ff:41:5e:79:01:6f:21:
                        ed:ed:17:80:2a:4a:a0:ba:38:d1:e9:87:e3:7a:57:
                        1a:34:d0:e5:37:a5:24:c1:cb:5c:39:72
                    ASN1 OID: secp224r1
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:TRUE
                X509v3 Key Usage: critical
                    Certificate Sign, CRL Sign
                X509v3 Subject Key Identifier:
                    4D:98:12:4C:ED:DD:1E:1F
                X509v3 Authority Key Identifier:
                    keyid:4D:98:12:4C:ED:DD:1E:1F

        Signature Algorithm: ecdsa-with-SHA256
             30:3e:02:1d:00:86:f2:88:c3:4f:c0:5f:e6:c1:f5:28:a7:26:
             7b:5d:57:fc:01:92:33:ac:02:05:24:a9:a5:05:77:02:1d:00:
             ab:f6:26:8e:e7:03:27:c5:e9:52:10:6f:7b:5f:1c:b4:2d:6d:
             5c:b7:82:41:d5:64:84:b2:4d:a7

    -----BEGIN CERTIFICATE-----
    MIIBdTCCASKgAwIBAgIIWCJoYQzPtnIwCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMEVFRkYwMDAwMDEwIBcNMTYwNDI0MTYzMDMyWhgPMjA2NjA0
    MjQxNjMwMzFaMCIxIDAeBgorBgEEAYLDKwEDDBAxOEI0MzBFRUZGMDAwMDAxME4w
    EAYHKoZIzj0CAQYFK4EEACEDOgAEwaWACe4tzloA98iizVmt5m7JwbCGp/9BXnkB
    byHt7ReAKkqgujjR6YfjelcaNNDlN6UkwctcOXKjSzBJMA8GA1UdEwEB/wQFMAMB
    Af8wDgYDVR0PAQH/BAQDAgEGMBEGA1UdDgQKBAhNmBJM7d0eHzATBgNVHSMEDDAK
    gAhNmBJM7d0eHzAKBggqhkjOPQQDAgNBADA+Ah0AhvKIw0/AX+bB9SinJntdV/wB
    kjOsAgUkqaUFdwIdAKv2Jo7nAyfF6VIQb3tfHLQtbVy3gkHVZISyTac=
    -----END CERTIFICATE-----

    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHBFSkiDziq6BEmPVovTClpbLkaOT8ycMt5dx5vSgBwYFK4EEACGhPAM6
    AATBpYAJ7i3OWgD3yKLNWa3mbsnBsIan/0FeeQFvIe3tF4AqSqC6ONHph+N6Vxo0
    0OU3pSTBy1w5cg==
    -----END EC PRIVATE KEY-----

 */

extern const uint8_t sTestCert_Root_SHA256_Weave[] =
{
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x58, 0x22, 0x68, 0x61, 0x0c, 0xcf,
    0xb6, 0x72, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x01, 0x00, 0x00, 0xff, 0xee, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x28, 0xb6, 0x40, 0x1f, 0x26, 0x05, 0x27, 0x32, 0x0a, 0x7f, 0x37, 0x06,
    0x27, 0x13, 0x01, 0x00, 0x00, 0xff, 0xee, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0xc1, 0xa5, 0x80, 0x09, 0xee, 0x2d, 0xce, 0x5a,
    0x00, 0xf7, 0xc8, 0xa2, 0xcd, 0x59, 0xad, 0xe6, 0x6e, 0xc9, 0xc1, 0xb0, 0x86, 0xa7, 0xff, 0x41,
    0x5e, 0x79, 0x01, 0x6f, 0x21, 0xed, 0xed, 0x17, 0x80, 0x2a, 0x4a, 0xa0, 0xba, 0x38, 0xd1, 0xe9,
    0x87, 0xe3, 0x7a, 0x57, 0x1a, 0x34, 0xd0, 0xe5, 0x37, 0xa5, 0x24, 0xc1, 0xcb, 0x5c, 0x39, 0x72,
    0x35, 0x83, 0x29, 0x01, 0x29, 0x02, 0x18, 0x35, 0x82, 0x29, 0x01, 0x24, 0x02, 0x60, 0x18, 0x35,
    0x81, 0x30, 0x02, 0x08, 0x4d, 0x98, 0x12, 0x4c, 0xed, 0xdd, 0x1e, 0x1f, 0x18, 0x35, 0x80, 0x30,
    0x02, 0x08, 0x4d, 0x98, 0x12, 0x4c, 0xed, 0xdd, 0x1e, 0x1f, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1d,
    0x00, 0x86, 0xf2, 0x88, 0xc3, 0x4f, 0xc0, 0x5f, 0xe6, 0xc1, 0xf5, 0x28, 0xa7, 0x26, 0x7b, 0x5d,
    0x57, 0xfc, 0x01, 0x92, 0x33, 0xac, 0x02, 0x05, 0x24, 0xa9, 0xa5, 0x05, 0x77, 0x30, 0x02, 0x1d,
    0x00, 0xab, 0xf6, 0x26, 0x8e, 0xe7, 0x03, 0x27, 0xc5, 0xe9, 0x52, 0x10, 0x6f, 0x7b, 0x5f, 0x1c,
    0xb4, 0x2d, 0x6d, 0x5c, 0xb7, 0x82, 0x41, 0xd5, 0x64, 0x84, 0xb2, 0x4d, 0xa7, 0x18, 0x18,
};

extern const size_t sTestCertLength_Root_SHA256_Weave = sizeof(sTestCert_Root_SHA256_Weave);

extern const uint8_t sTestCert_Root_SHA256_DER[] =
{
    0x30, 0x82, 0x01, 0x75, 0x30, 0x82, 0x01, 0x22, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x58,
    0x22, 0x68, 0x61, 0x0c, 0xcf, 0xb6, 0x72, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01,
    0x82, 0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30, 0x45, 0x45, 0x46,
    0x46, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x20, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x34, 0x32,
    0x34, 0x31, 0x36, 0x33, 0x30, 0x33, 0x32, 0x5a, 0x18, 0x0f, 0x32, 0x30, 0x36, 0x36, 0x30, 0x34,
    0x32, 0x34, 0x31, 0x36, 0x33, 0x30, 0x33, 0x31, 0x5a, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06,
    0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42,
    0x34, 0x33, 0x30, 0x45, 0x45, 0x46, 0x46, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x4e, 0x30,
    0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00,
    0x21, 0x03, 0x3a, 0x00, 0x04, 0xc1, 0xa5, 0x80, 0x09, 0xee, 0x2d, 0xce, 0x5a, 0x00, 0xf7, 0xc8,
    0xa2, 0xcd, 0x59, 0xad, 0xe6, 0x6e, 0xc9, 0xc1, 0xb0, 0x86, 0xa7, 0xff, 0x41, 0x5e, 0x79, 0x01,
    0x6f, 0x21, 0xed, 0xed, 0x17, 0x80, 0x2a, 0x4a, 0xa0, 0xba, 0x38, 0xd1, 0xe9, 0x87, 0xe3, 0x7a,
    0x57, 0x1a, 0x34, 0xd0, 0xe5, 0x37, 0xa5, 0x24, 0xc1, 0xcb, 0x5c, 0x39, 0x72, 0xa3, 0x4b, 0x30,
    0x49, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01,
    0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02,
    0x01, 0x06, 0x30, 0x11, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x0a, 0x04, 0x08, 0x4d, 0x98, 0x12,
    0x4c, 0xed, 0xdd, 0x1e, 0x1f, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x0c, 0x30, 0x0a,
    0x80, 0x08, 0x4d, 0x98, 0x12, 0x4c, 0xed, 0xdd, 0x1e, 0x1f, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86,
    0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x41, 0x00, 0x30, 0x3e, 0x02, 0x1d, 0x00, 0x86, 0xf2,
    0x88, 0xc3, 0x4f, 0xc0, 0x5f, 0xe6, 0xc1, 0xf5, 0x28, 0xa7, 0x26, 0x7b, 0x5d, 0x57, 0xfc, 0x01,
    0x92, 0x33, 0xac, 0x02, 0x05, 0x24, 0xa9, 0xa5, 0x05, 0x77, 0x02, 0x1d, 0x00, 0xab, 0xf6, 0x26,
    0x8e, 0xe7, 0x03, 0x27, 0xc5, 0xe9, 0x52, 0x10, 0x6f, 0x7b, 0x5f, 0x1c, 0xb4, 0x2d, 0x6d, 0x5c,
    0xb7, 0x82, 0x41, 0xd5, 0x64, 0x84, 0xb2, 0x4d, 0xa7,
};

extern const size_t sTestCertLength_Root_SHA256_DER = sizeof(sTestCert_Root_SHA256_DER);


/*
    CA Certificate
        Data:
            Version: 3 (0x2)
            Serial Number: 2752488878799751227 (0x2632ce0d4d12883b)
        Signature Algorithm: ecdsa-with-SHA1
            Issuer: 1.3.6.1.4.1.41387.1.3=18B430EEFF000001
            Validity
                Not Before: Apr 24 16:32:51 2016 GMT
                Not After : Apr 24 16:32:51 2017 GMT
            Subject: 1.3.6.1.4.1.41387.1.3=18B430EEFF000002
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (224 bit)
                    pub:
                        04:2a:ea:bf:2f:e0:e5:98:f5:b1:8e:70:a6:75:c2:
                        db:bd:91:04:ef:d5:c4:cb:9f:53:ff:17:ab:29:99:
                        6a:89:03:b9:72:87:b9:d6:54:ab:ae:6c:5d:01:93:
                        ab:da:7b:e4:54:d2:63:56:ba:06:5f:9f
                    ASN1 OID: secp224r1
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:TRUE
                X509v3 Key Usage: critical
                    Certificate Sign, CRL Sign
                X509v3 Subject Key Identifier:
                    46:F3:F1:AF:DE:30:78:9F
                X509v3 Authority Key Identifier:
                    keyid:4D:98:12:4C:ED:DD:1E:1F

        Signature Algorithm: ecdsa-with-SHA1
             30:3d:02:1c:18:58:3b:2c:f4:f0:98:0b:34:eb:b6:01:5f:d2:
             47:13:56:b0:1c:53:85:73:1d:6e:dd:90:ce:3a:02:1d:00:a4:
             d8:86:d8:1e:41:33:a1:92:32:ce:79:ba:16:1a:3e:4c:e4:e9:
             b9:d5:84:28:ec:6c:dd:08:ec
    -----BEGIN CERTIFICATE-----
    MIIBcDCCAR+gAwIBAgIIJjLODU0SiDswCQYHKoZIzj0EATAiMSAwHgYKKwYBBAGC
    wysBAwwQMThCNDMwRUVGRjAwMDAwMTAeFw0xNjA0MjQxNjMyNTFaFw0xNzA0MjQx
    NjMyNTFaMCIxIDAeBgorBgEEAYLDKwEDDBAxOEI0MzBFRUZGMDAwMDAyME4wEAYH
    KoZIzj0CAQYFK4EEACEDOgAEKuq/L+DlmPWxjnCmdcLbvZEE79XEy59T/xerKZlq
    iQO5coe51lSrrmxdAZOr2nvkVNJjVroGX5+jSzBJMA8GA1UdEwEB/wQFMAMBAf8w
    DgYDVR0PAQH/BAQDAgEGMBEGA1UdDgQKBAhG8/Gv3jB4nzATBgNVHSMEDDAKgAhN
    mBJM7d0eHzAJBgcqhkjOPQQBA0AAMD0CHBhYOyz08JgLNOu2AV/SRxNWsBxThXMd
    bt2QzjoCHQCk2IbYHkEzoZIyznm6Fho+TOTpudWEKOxs3Qjs
    -----END CERTIFICATE-----

    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHNsl1iOM9Rz/8NTA10/83nj6smbV9oPSTqKoYZqgBwYFK4EEACGhPAM6
    AAQq6r8v4OWY9bGOcKZ1wtu9kQTv1cTLn1P/F6spmWqJA7lyh7nWVKuubF0Bk6va
    e+RU0mNWugZfnw==
    -----END EC PRIVATE KEY-----
 */

extern const uint8_t sTestCert_CA_Weave[] =
{
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x26, 0x32, 0xce, 0x0d, 0x4d, 0x12,
    0x88, 0x3b, 0x24, 0x02, 0x04, 0x37, 0x03, 0x27, 0x13, 0x01, 0x00, 0x00, 0xff, 0xee, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0xb3, 0xb6, 0x40, 0x1f, 0x26, 0x05, 0xb3, 0x24, 0x2b, 0x21, 0x37, 0x06,
    0x27, 0x13, 0x02, 0x00, 0x00, 0xff, 0xee, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0x2a, 0xea, 0xbf, 0x2f, 0xe0, 0xe5, 0x98, 0xf5,
    0xb1, 0x8e, 0x70, 0xa6, 0x75, 0xc2, 0xdb, 0xbd, 0x91, 0x04, 0xef, 0xd5, 0xc4, 0xcb, 0x9f, 0x53,
    0xff, 0x17, 0xab, 0x29, 0x99, 0x6a, 0x89, 0x03, 0xb9, 0x72, 0x87, 0xb9, 0xd6, 0x54, 0xab, 0xae,
    0x6c, 0x5d, 0x01, 0x93, 0xab, 0xda, 0x7b, 0xe4, 0x54, 0xd2, 0x63, 0x56, 0xba, 0x06, 0x5f, 0x9f,
    0x35, 0x83, 0x29, 0x01, 0x29, 0x02, 0x18, 0x35, 0x82, 0x29, 0x01, 0x24, 0x02, 0x60, 0x18, 0x35,
    0x81, 0x30, 0x02, 0x08, 0x46, 0xf3, 0xf1, 0xaf, 0xde, 0x30, 0x78, 0x9f, 0x18, 0x35, 0x80, 0x30,
    0x02, 0x08, 0x4d, 0x98, 0x12, 0x4c, 0xed, 0xdd, 0x1e, 0x1f, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1c,
    0x18, 0x58, 0x3b, 0x2c, 0xf4, 0xf0, 0x98, 0x0b, 0x34, 0xeb, 0xb6, 0x01, 0x5f, 0xd2, 0x47, 0x13,
    0x56, 0xb0, 0x1c, 0x53, 0x85, 0x73, 0x1d, 0x6e, 0xdd, 0x90, 0xce, 0x3a, 0x30, 0x02, 0x1d, 0x00,
    0xa4, 0xd8, 0x86, 0xd8, 0x1e, 0x41, 0x33, 0xa1, 0x92, 0x32, 0xce, 0x79, 0xba, 0x16, 0x1a, 0x3e,
    0x4c, 0xe4, 0xe9, 0xb9, 0xd5, 0x84, 0x28, 0xec, 0x6c, 0xdd, 0x08, 0xec, 0x18, 0x18,
};

extern const size_t sTestCertLength_CA_Weave = sizeof(sTestCert_CA_Weave);

extern const uint8_t sTestCert_CA_DER[] =
{
    0x30, 0x82, 0x01, 0x70, 0x30, 0x82, 0x01, 0x1f, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x26,
    0x32, 0xce, 0x0d, 0x4d, 0x12, 0x88, 0x3b, 0x30, 0x09, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x01, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82,
    0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30, 0x45, 0x45, 0x46, 0x46,
    0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x34, 0x32, 0x34,
    0x31, 0x36, 0x33, 0x32, 0x35, 0x31, 0x5a, 0x17, 0x0d, 0x31, 0x37, 0x30, 0x34, 0x32, 0x34, 0x31,
    0x36, 0x33, 0x32, 0x35, 0x31, 0x5a, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06,
    0x01, 0x04, 0x01, 0x82, 0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30,
    0x45, 0x45, 0x46, 0x46, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x4e, 0x30, 0x10, 0x06, 0x07,
    0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x21, 0x03, 0x3a,
    0x00, 0x04, 0x2a, 0xea, 0xbf, 0x2f, 0xe0, 0xe5, 0x98, 0xf5, 0xb1, 0x8e, 0x70, 0xa6, 0x75, 0xc2,
    0xdb, 0xbd, 0x91, 0x04, 0xef, 0xd5, 0xc4, 0xcb, 0x9f, 0x53, 0xff, 0x17, 0xab, 0x29, 0x99, 0x6a,
    0x89, 0x03, 0xb9, 0x72, 0x87, 0xb9, 0xd6, 0x54, 0xab, 0xae, 0x6c, 0x5d, 0x01, 0x93, 0xab, 0xda,
    0x7b, 0xe4, 0x54, 0xd2, 0x63, 0x56, 0xba, 0x06, 0x5f, 0x9f, 0xa3, 0x4b, 0x30, 0x49, 0x30, 0x0f,
    0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30,
    0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x01, 0x06, 0x30,
    0x11, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x0a, 0x04, 0x08, 0x46, 0xf3, 0xf1, 0xaf, 0xde, 0x30,
    0x78, 0x9f, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x0c, 0x30, 0x0a, 0x80, 0x08, 0x4d,
    0x98, 0x12, 0x4c, 0xed, 0xdd, 0x1e, 0x1f, 0x30, 0x09, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x01, 0x03, 0x40, 0x00, 0x30, 0x3d, 0x02, 0x1c, 0x18, 0x58, 0x3b, 0x2c, 0xf4, 0xf0, 0x98,
    0x0b, 0x34, 0xeb, 0xb6, 0x01, 0x5f, 0xd2, 0x47, 0x13, 0x56, 0xb0, 0x1c, 0x53, 0x85, 0x73, 0x1d,
    0x6e, 0xdd, 0x90, 0xce, 0x3a, 0x02, 0x1d, 0x00, 0xa4, 0xd8, 0x86, 0xd8, 0x1e, 0x41, 0x33, 0xa1,
    0x92, 0x32, 0xce, 0x79, 0xba, 0x16, 0x1a, 0x3e, 0x4c, 0xe4, 0xe9, 0xb9, 0xd5, 0x84, 0x28, 0xec,
    0x6c, 0xdd, 0x08, 0xec,
};

extern const size_t sTestCertLength_CA_DER = sizeof(sTestCert_CA_DER);

extern const uint8_t sTestCert_CA_PublicKey[] =
{
    0x04, 0x2a, 0xea, 0xbf, 0x2f, 0xe0, 0xe5, 0x98, 0xf5, 0xb1, 0x8e, 0x70, 0xa6, 0x75, 0xc2, 0xdb,
    0xbd, 0x91, 0x04, 0xef, 0xd5, 0xc4, 0xcb, 0x9f, 0x53, 0xff, 0x17, 0xab, 0x29, 0x99, 0x6a, 0x89,
    0x03, 0xb9, 0x72, 0x87, 0xb9, 0xd6, 0x54, 0xab, 0xae, 0x6c, 0x5d, 0x01, 0x93, 0xab, 0xda, 0x7b,
    0xe4, 0x54, 0xd2, 0x63, 0x56, 0xba, 0x06, 0x5f, 0x9f
};

extern const size_t sTestCertLength_CA_PublicKey = sizeof(sTestCert_CA_PublicKey);

extern const uint8_t sTestCert_CA_PrivateKey_Weave[] =
{
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5a, 0x23, 0x30, 0x02, 0x1c,
    0xdb, 0x25, 0xd6, 0x23, 0x8c, 0xf5, 0x1c, 0xff, 0xf0, 0xd4, 0xc0, 0xd7, 0x4f, 0xfc, 0xde, 0x78,
    0xfa, 0xb2, 0x66, 0xd5, 0xf6, 0x83, 0xd2, 0x4e, 0xa2, 0xa8, 0x61, 0x9a, 0x30, 0x03, 0x39, 0x04,
    0x2a, 0xea, 0xbf, 0x2f, 0xe0, 0xe5, 0x98, 0xf5, 0xb1, 0x8e, 0x70, 0xa6, 0x75, 0xc2, 0xdb, 0xbd,
    0x91, 0x04, 0xef, 0xd5, 0xc4, 0xcb, 0x9f, 0x53, 0xff, 0x17, 0xab, 0x29, 0x99, 0x6a, 0x89, 0x03,
    0xb9, 0x72, 0x87, 0xb9, 0xd6, 0x54, 0xab, 0xae, 0x6c, 0x5d, 0x01, 0x93, 0xab, 0xda, 0x7b, 0xe4,
    0x54, 0xd2, 0x63, 0x56, 0xba, 0x06, 0x5f, 0x9f, 0x18
};

extern const size_t sTestCertLength_CA_PrivateKey_Weave = sizeof(sTestCert_CA_PrivateKey_Weave);

extern const uint8_t sTestCert_CA_PrivateKey[] =
{
    0xDB, 0x25, 0xD6, 0x23, 0x8C, 0xF5, 0x1C, 0xFF, 0xF0, 0xD4, 0xC0, 0xD7, 0x4F, 0xFC, 0xDE, 0x78,
    0xFA, 0xB2, 0x66, 0xD5, 0xF6, 0x83, 0xD2, 0x4E, 0xA2, 0xA8, 0x61, 0x9A
};

extern const size_t sTestCertLength_CA_PrivateKey = sizeof(sTestCert_CA_PrivateKey);

extern const uint8_t sTestCert_CA_SubjectKeyId[] =
{
    0x46, 0xF3, 0xF1, 0xAF, 0xDE, 0x30, 0x78, 0x9F
};

extern const size_t sTestCertLength_CA_SubjectKeyId = sizeof(sTestCert_CA_SubjectKeyId);

extern const uint32_t sTestCert_CA_CurveId = nl::Weave::Profiles::Security::kWeaveCurveId_secp224r1;

extern const uint64_t sTestCert_CA_Id = 0x18B430EEFF000002ULL;


/*
    CA_SHA256 Certificate

    NOTE: This uses the same key as the CA certificate.

        Data:
            Version: 3 (0x2)
            Serial Number: 606938726170018202 (0x86c478e45cac19a)
        Signature Algorithm: ecdsa-with-SHA256
            Issuer: 1.3.6.1.4.1.41387.1.3=18B430EEFF000001
            Validity
                Not Before: Apr 24 16:32:51 2016 GMT
                Not After : Apr 24 16:32:50 2066 GMT
            Subject: 1.3.6.1.4.1.41387.1.3=18B430EEFF000002
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (224 bit)
                    pub:
                        04:2a:ea:bf:2f:e0:e5:98:f5:b1:8e:70:a6:75:c2:
                        db:bd:91:04:ef:d5:c4:cb:9f:53:ff:17:ab:29:99:
                        6a:89:03:b9:72:87:b9:d6:54:ab:ae:6c:5d:01:93:
                        ab:da:7b:e4:54:d2:63:56:ba:06:5f:9f
                    ASN1 OID: secp224r1
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:TRUE
                X509v3 Key Usage: critical
                    Certificate Sign, CRL Sign
                X509v3 Subject Key Identifier:
                    46:F3:F1:AF:DE:30:78:9F
                X509v3 Authority Key Identifier:
                    keyid:4D:98:12:4C:ED:DD:1E:1F

        Signature Algorithm: ecdsa-with-SHA256
             30:3c:02:1c:24:d3:aa:94:70:a8:f0:f0:79:89:04:e1:f3:79:
             ab:61:35:86:b8:1f:58:36:1c:55:4d:66:2b:40:02:1c:61:9c:
             c9:c5:34:53:6c:d8:00:3c:9d:98:36:6c:4b:fe:97:be:2e:18:
             61:50:60:0d:fc:14:76:43

    -----BEGIN CERTIFICATE-----
    MIIBczCCASKgAwIBAgIICGxHjkXKwZowCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMEVFRkYwMDAwMDEwIBcNMTYwNDI0MTYzMjUxWhgPMjA2NjA0
    MjQxNjMyNTBaMCIxIDAeBgorBgEEAYLDKwEDDBAxOEI0MzBFRUZGMDAwMDAyME4w
    EAYHKoZIzj0CAQYFK4EEACEDOgAEKuq/L+DlmPWxjnCmdcLbvZEE79XEy59T/xer
    KZlqiQO5coe51lSrrmxdAZOr2nvkVNJjVroGX5+jSzBJMA8GA1UdEwEB/wQFMAMB
    Af8wDgYDVR0PAQH/BAQDAgEGMBEGA1UdDgQKBAhG8/Gv3jB4nzATBgNVHSMEDDAK
    gAhNmBJM7d0eHzAKBggqhkjOPQQDAgM/ADA8Ahwk06qUcKjw8HmJBOHzeathNYa4
    H1g2HFVNZitAAhxhnMnFNFNs2AA8nZg2bEv+l74uGGFQYA38FHZD
    -----END CERTIFICATE-----

    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHNsl1iOM9Rz/8NTA10/83nj6smbV9oPSTqKoYZqgBwYFK4EEACGhPAM6
    AAQq6r8v4OWY9bGOcKZ1wtu9kQTv1cTLn1P/F6spmWqJA7lyh7nWVKuubF0Bk6va
    e+RU0mNWugZfnw==
    -----END EC PRIVATE KEY-----
 */

extern const uint8_t sTestCert_CA_SHA256_Weave[] =
{
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x08, 0x6c, 0x47, 0x8e, 0x45, 0xca,
    0xc1, 0x9a, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x01, 0x00, 0x00, 0xff, 0xee, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0xb3, 0xb6, 0x40, 0x1f, 0x26, 0x05, 0xb2, 0x32, 0x0a, 0x7f, 0x37, 0x06,
    0x27, 0x13, 0x02, 0x00, 0x00, 0xff, 0xee, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0x2a, 0xea, 0xbf, 0x2f, 0xe0, 0xe5, 0x98, 0xf5,
    0xb1, 0x8e, 0x70, 0xa6, 0x75, 0xc2, 0xdb, 0xbd, 0x91, 0x04, 0xef, 0xd5, 0xc4, 0xcb, 0x9f, 0x53,
    0xff, 0x17, 0xab, 0x29, 0x99, 0x6a, 0x89, 0x03, 0xb9, 0x72, 0x87, 0xb9, 0xd6, 0x54, 0xab, 0xae,
    0x6c, 0x5d, 0x01, 0x93, 0xab, 0xda, 0x7b, 0xe4, 0x54, 0xd2, 0x63, 0x56, 0xba, 0x06, 0x5f, 0x9f,
    0x35, 0x83, 0x29, 0x01, 0x29, 0x02, 0x18, 0x35, 0x82, 0x29, 0x01, 0x24, 0x02, 0x60, 0x18, 0x35,
    0x81, 0x30, 0x02, 0x08, 0x46, 0xf3, 0xf1, 0xaf, 0xde, 0x30, 0x78, 0x9f, 0x18, 0x35, 0x80, 0x30,
    0x02, 0x08, 0x4d, 0x98, 0x12, 0x4c, 0xed, 0xdd, 0x1e, 0x1f, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1c,
    0x24, 0xd3, 0xaa, 0x94, 0x70, 0xa8, 0xf0, 0xf0, 0x79, 0x89, 0x04, 0xe1, 0xf3, 0x79, 0xab, 0x61,
    0x35, 0x86, 0xb8, 0x1f, 0x58, 0x36, 0x1c, 0x55, 0x4d, 0x66, 0x2b, 0x40, 0x30, 0x02, 0x1c, 0x61,
    0x9c, 0xc9, 0xc5, 0x34, 0x53, 0x6c, 0xd8, 0x00, 0x3c, 0x9d, 0x98, 0x36, 0x6c, 0x4b, 0xfe, 0x97,
    0xbe, 0x2e, 0x18, 0x61, 0x50, 0x60, 0x0d, 0xfc, 0x14, 0x76, 0x43, 0x18, 0x18,
};

extern const size_t sTestCertLength_CA_SHA256_Weave = sizeof(sTestCert_CA_SHA256_Weave);

extern const uint8_t sTestCert_CA_SHA256_DER[] =
{
    0x30, 0x82, 0x01, 0x73, 0x30, 0x82, 0x01, 0x22, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x08,
    0x6c, 0x47, 0x8e, 0x45, 0xca, 0xc1, 0x9a, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01,
    0x82, 0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30, 0x45, 0x45, 0x46,
    0x46, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x20, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x34, 0x32,
    0x34, 0x31, 0x36, 0x33, 0x32, 0x35, 0x31, 0x5a, 0x18, 0x0f, 0x32, 0x30, 0x36, 0x36, 0x30, 0x34,
    0x32, 0x34, 0x31, 0x36, 0x33, 0x32, 0x35, 0x30, 0x5a, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06,
    0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42,
    0x34, 0x33, 0x30, 0x45, 0x45, 0x46, 0x46, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x4e, 0x30,
    0x10, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00,
    0x21, 0x03, 0x3a, 0x00, 0x04, 0x2a, 0xea, 0xbf, 0x2f, 0xe0, 0xe5, 0x98, 0xf5, 0xb1, 0x8e, 0x70,
    0xa6, 0x75, 0xc2, 0xdb, 0xbd, 0x91, 0x04, 0xef, 0xd5, 0xc4, 0xcb, 0x9f, 0x53, 0xff, 0x17, 0xab,
    0x29, 0x99, 0x6a, 0x89, 0x03, 0xb9, 0x72, 0x87, 0xb9, 0xd6, 0x54, 0xab, 0xae, 0x6c, 0x5d, 0x01,
    0x93, 0xab, 0xda, 0x7b, 0xe4, 0x54, 0xd2, 0x63, 0x56, 0xba, 0x06, 0x5f, 0x9f, 0xa3, 0x4b, 0x30,
    0x49, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01,
    0x01, 0xff, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02,
    0x01, 0x06, 0x30, 0x11, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x0a, 0x04, 0x08, 0x46, 0xf3, 0xf1,
    0xaf, 0xde, 0x30, 0x78, 0x9f, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x0c, 0x30, 0x0a,
    0x80, 0x08, 0x4d, 0x98, 0x12, 0x4c, 0xed, 0xdd, 0x1e, 0x1f, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86,
    0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x3f, 0x00, 0x30, 0x3c, 0x02, 0x1c, 0x24, 0xd3, 0xaa,
    0x94, 0x70, 0xa8, 0xf0, 0xf0, 0x79, 0x89, 0x04, 0xe1, 0xf3, 0x79, 0xab, 0x61, 0x35, 0x86, 0xb8,
    0x1f, 0x58, 0x36, 0x1c, 0x55, 0x4d, 0x66, 0x2b, 0x40, 0x02, 0x1c, 0x61, 0x9c, 0xc9, 0xc5, 0x34,
    0x53, 0x6c, 0xd8, 0x00, 0x3c, 0x9d, 0x98, 0x36, 0x6c, 0x4b, 0xfe, 0x97, 0xbe, 0x2e, 0x18, 0x61,
    0x50, 0x60, 0x0d, 0xfc, 0x14, 0x76, 0x43,
};

extern const size_t sTestCertLength_CA_SHA256_DER = sizeof(sTestCert_CA_SHA256_DER);



/*
    Device Certificate
        Data:
            Version: 3 (0x2)
            Serial Number: 3627051259175157392 (0x3255dfe73d44be90)
        Signature Algorithm: ecdsa-with-SHA1
            Issuer: 1.3.6.1.4.1.41387.1.3=18B430EEFF000002
            Validity
                Not Before: Apr 24 16:35:44 2016 GMT
                Not After : May 24 16:35:44 2016 GMT
            Subject: 1.3.6.1.4.1.41387.1.1=18B4300000000001
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (224 bit)
                    pub:
                        04:2e:61:a2:54:66:e6:0c:4e:40:43:3f:32:f8:19:
                        77:55:21:7b:3f:e3:be:51:e7:11:e6:e8:0a:d1:f3:
                        51:b0:c7:92:2f:90:08:a4:9f:ca:fa:2b:f3:0f:70:
                        8d:bf:bf:d0:0c:df:80:10:3d:6a:32:65
                    ASN1 OID: secp224r1
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:FALSE
                X509v3 Key Usage: critical
                    Digital Signature, Key Encipherment
                X509v3 Extended Key Usage: critical
                    TLS Web Client Authentication, TLS Web Server Authentication
                X509v3 Subject Key Identifier:
                    4B:A7:3E:ED:22:0E:10:2D
                X509v3 Authority Key Identifier:
                    keyid:46:F3:F1:AF:DE:30:78:9F

        Signature Algorithm: ecdsa-with-SHA1
             30:3e:02:1d:00:c2:de:64:1b:70:2a:68:51:61:70:29:85:f9:
             da:75:84:0f:d1:93:81:5b:bd:e4:66:f6:10:12:d0:02:1d:00:
             ec:b7:47:0c:8c:01:c6:ef:9a:df:4b:d2:3d:f2:4c:cb:0d:b7:
             6b:35:f7:7c:a1:d3:f2:ca:a8:ae

    -----BEGIN CERTIFICATE-----
    MIIBkDCCAT6gAwIBAgIIMlXf5z1EvpAwCQYHKoZIzj0EATAiMSAwHgYKKwYBBAGC
    wysBAwwQMThCNDMwRUVGRjAwMDAwMjAeFw0xNjA0MjQxNjM1NDRaFw0xNjA1MjQx
    NjM1NDRaMCIxIDAeBgorBgEEAYLDKwEBDBAxOEI0MzAwMDAwMDAwMDAxME4wEAYH
    KoZIzj0CAQYFK4EEACEDOgAELmGiVGbmDE5AQz8y+Bl3VSF7P+O+UecR5ugK0fNR
    sMeSL5AIpJ/K+ivzD3CNv7/QDN+AED1qMmWjajBoMAwGA1UdEwEB/wQCMAAwDgYD
    VR0PAQH/BAQDAgWgMCAGA1UdJQEB/wQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAR
    BgNVHQ4ECgQIS6c+7SIOEC0wEwYDVR0jBAwwCoAIRvPxr94weJ8wCQYHKoZIzj0E
    AQNBADA+Ah0Awt5kG3AqaFFhcCmF+dp1hA/Rk4FbveRm9hAS0AIdAOy3RwyMAcbv
    mt9L0j3yTMsNt2s193yh0/LKqK4=
    -----END CERTIFICATE-----
 */

extern const uint8_t sTestCert_Dev_Weave[] =
{
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x32, 0x55, 0xdf, 0xe7, 0x3d, 0x44,
    0xbe, 0x90, 0x24, 0x02, 0x04, 0x37, 0x03, 0x27, 0x13, 0x02, 0x00, 0x00, 0xff, 0xee, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x60, 0xb7, 0x40, 0x1f, 0x26, 0x05, 0xe0, 0x95, 0x69, 0x1f, 0x37, 0x06,
    0x27, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0x2e, 0x61, 0xa2, 0x54, 0x66, 0xe6, 0x0c, 0x4e,
    0x40, 0x43, 0x3f, 0x32, 0xf8, 0x19, 0x77, 0x55, 0x21, 0x7b, 0x3f, 0xe3, 0xbe, 0x51, 0xe7, 0x11,
    0xe6, 0xe8, 0x0a, 0xd1, 0xf3, 0x51, 0xb0, 0xc7, 0x92, 0x2f, 0x90, 0x08, 0xa4, 0x9f, 0xca, 0xfa,
    0x2b, 0xf3, 0x0f, 0x70, 0x8d, 0xbf, 0xbf, 0xd0, 0x0c, 0xdf, 0x80, 0x10, 0x3d, 0x6a, 0x32, 0x65,
    0x35, 0x83, 0x29, 0x01, 0x18, 0x35, 0x82, 0x29, 0x01, 0x24, 0x02, 0x05, 0x18, 0x35, 0x84, 0x29,
    0x01, 0x36, 0x02, 0x04, 0x02, 0x04, 0x01, 0x18, 0x18, 0x35, 0x81, 0x30, 0x02, 0x08, 0x4b, 0xa7,
    0x3e, 0xed, 0x22, 0x0e, 0x10, 0x2d, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x46, 0xf3, 0xf1, 0xaf,
    0xde, 0x30, 0x78, 0x9f, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1d, 0x00, 0xc2, 0xde, 0x64, 0x1b, 0x70,
    0x2a, 0x68, 0x51, 0x61, 0x70, 0x29, 0x85, 0xf9, 0xda, 0x75, 0x84, 0x0f, 0xd1, 0x93, 0x81, 0x5b,
    0xbd, 0xe4, 0x66, 0xf6, 0x10, 0x12, 0xd0, 0x30, 0x02, 0x1d, 0x00, 0xec, 0xb7, 0x47, 0x0c, 0x8c,
    0x01, 0xc6, 0xef, 0x9a, 0xdf, 0x4b, 0xd2, 0x3d, 0xf2, 0x4c, 0xcb, 0x0d, 0xb7, 0x6b, 0x35, 0xf7,
    0x7c, 0xa1, 0xd3, 0xf2, 0xca, 0xa8, 0xae, 0x18, 0x18,
};

extern const size_t sTestCertLength_Dev_Weave = sizeof(sTestCert_Dev_Weave);

extern const uint8_t sTestCert_Dev_DER[] =
{
    0x30, 0x82, 0x01, 0x90, 0x30, 0x82, 0x01, 0x3e, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x32,
    0x55, 0xdf, 0xe7, 0x3d, 0x44, 0xbe, 0x90, 0x30, 0x09, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x01, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82,
    0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30, 0x45, 0x45, 0x46, 0x46,
    0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x34, 0x32, 0x34,
    0x31, 0x36, 0x33, 0x35, 0x34, 0x34, 0x5a, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x35, 0x32, 0x34, 0x31,
    0x36, 0x33, 0x35, 0x34, 0x34, 0x5a, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06,
    0x01, 0x04, 0x01, 0x82, 0xc3, 0x2b, 0x01, 0x01, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30,
    0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x4e, 0x30, 0x10, 0x06, 0x07,
    0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x21, 0x03, 0x3a,
    0x00, 0x04, 0x2e, 0x61, 0xa2, 0x54, 0x66, 0xe6, 0x0c, 0x4e, 0x40, 0x43, 0x3f, 0x32, 0xf8, 0x19,
    0x77, 0x55, 0x21, 0x7b, 0x3f, 0xe3, 0xbe, 0x51, 0xe7, 0x11, 0xe6, 0xe8, 0x0a, 0xd1, 0xf3, 0x51,
    0xb0, 0xc7, 0x92, 0x2f, 0x90, 0x08, 0xa4, 0x9f, 0xca, 0xfa, 0x2b, 0xf3, 0x0f, 0x70, 0x8d, 0xbf,
    0xbf, 0xd0, 0x0c, 0xdf, 0x80, 0x10, 0x3d, 0x6a, 0x32, 0x65, 0xa3, 0x6a, 0x30, 0x68, 0x30, 0x0c,
    0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06, 0x03,
    0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x05, 0xa0, 0x30, 0x20, 0x06, 0x03,
    0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x16, 0x30, 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05,
    0x05, 0x07, 0x03, 0x02, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x11,
    0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x0a, 0x04, 0x08, 0x4b, 0xa7, 0x3e, 0xed, 0x22, 0x0e, 0x10,
    0x2d, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x0c, 0x30, 0x0a, 0x80, 0x08, 0x46, 0xf3,
    0xf1, 0xaf, 0xde, 0x30, 0x78, 0x9f, 0x30, 0x09, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04,
    0x01, 0x03, 0x41, 0x00, 0x30, 0x3e, 0x02, 0x1d, 0x00, 0xc2, 0xde, 0x64, 0x1b, 0x70, 0x2a, 0x68,
    0x51, 0x61, 0x70, 0x29, 0x85, 0xf9, 0xda, 0x75, 0x84, 0x0f, 0xd1, 0x93, 0x81, 0x5b, 0xbd, 0xe4,
    0x66, 0xf6, 0x10, 0x12, 0xd0, 0x02, 0x1d, 0x00, 0xec, 0xb7, 0x47, 0x0c, 0x8c, 0x01, 0xc6, 0xef,
    0x9a, 0xdf, 0x4b, 0xd2, 0x3d, 0xf2, 0x4c, 0xcb, 0x0d, 0xb7, 0x6b, 0x35, 0xf7, 0x7c, 0xa1, 0xd3,
    0xf2, 0xca, 0xa8, 0xae,
};

extern const size_t sTestCertLength_Dev_DER = sizeof(sTestCert_Dev_DER);

/*
    Device_SHA256 Certificate
        Data:
            Version: 3 (0x2)
            Serial Number: 587454207570384641 (0x8270e7d440a9701)
        Signature Algorithm: ecdsa-with-SHA256
            Issuer: 1.3.6.1.4.1.41387.1.3=18B430EEFF000002
            Validity
                Not Before: Apr 24 00:00:00 2016 GMT
                Not After : May 23 23:59:59 2016 GMT
            Subject: 1.3.6.1.4.1.41387.1.1=18B4300000000001
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (224 bit)
                    pub:
                        04:42:7d:c9:dc:be:86:87:48:7b:41:05:5f:4f:db:
                        7f:91:be:1b:53:91:5e:01:ab:75:d8:e1:85:f6:21:
                        b1:1d:c3:93:05:48:f5:b2:8a:90:bc:fa:1a:24:47:
                        e7:34:6f:15:80:4a:d8:a2:5a:91:4f:7e
                    ASN1 OID: secp224r1
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:FALSE
                X509v3 Key Usage: critical
                    Digital Signature, Key Encipherment
                X509v3 Extended Key Usage: critical
                    TLS Web Client Authentication, TLS Web Server Authentication
                X509v3 Subject Key Identifier:
                    48:25:80:28:2D:F3:CA:89
                X509v3 Authority Key Identifier:
                    keyid:46:F3:F1:AF:DE:30:78:9F

        Signature Algorithm: ecdsa-with-SHA256
             30:3d:02:1d:00:87:da:4d:7a:cb:4c:17:0f:57:95:16:95:c0:
             d6:a8:9f:6e:5c:3c:cf:6c:e7:14:cc:f8:d5:17:91:02:1c:7a:
             bf:6a:f1:00:a1:84:67:14:f5:f3:fa:69:38:a0:1f:ad:aa:24:
             fb:b6:24:bd:3e:a7:a4:a4:00

    -----BEGIN CERTIFICATE-----
    MIIBkTCCAT+gAwIBAgIICCcOfUQKlwEwCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMEVFRkYwMDAwMDIwHhcNMTYwNDI0MDAwMDAwWhcNMTYwNTIz
    MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBAQwQMThCNDMwMDAwMDAwMDAwMTBOMBAG
    ByqGSM49AgEGBSuBBAAhAzoABEJ9ydy+hodIe0EFX0/bf5G+G1ORXgGrddjhhfYh
    sR3DkwVI9bKKkLz6GiRH5zRvFYBK2KJakU9+o2owaDAMBgNVHRMBAf8EAjAAMA4G
    A1UdDwEB/wQEAwIFoDAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
    EQYDVR0OBAoECEglgCgt88qJMBMGA1UdIwQMMAqACEbz8a/eMHifMAoGCCqGSM49
    BAMCA0AAMD0CHQCH2k16y0wXD1eVFpXA1qifblw8z2znFMz41ReRAhx6v2rxAKGE
    ZxT18/ppOKAfraok+7YkvT6npKQA
    -----END CERTIFICATE-----
 */

extern const uint8_t sTestCert_Dev_SHA256_Weave[] =
{
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x08, 0x27, 0x0e, 0x7d, 0x44, 0x0a,
    0x97, 0x01, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x02, 0x00, 0x00, 0xff, 0xee, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x00, 0xce, 0x3f, 0x1f, 0x26, 0x05, 0x7f, 0xac, 0x68, 0x1f, 0x37, 0x06,
    0x27, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0x42, 0x7d, 0xc9, 0xdc, 0xbe, 0x86, 0x87, 0x48,
    0x7b, 0x41, 0x05, 0x5f, 0x4f, 0xdb, 0x7f, 0x91, 0xbe, 0x1b, 0x53, 0x91, 0x5e, 0x01, 0xab, 0x75,
    0xd8, 0xe1, 0x85, 0xf6, 0x21, 0xb1, 0x1d, 0xc3, 0x93, 0x05, 0x48, 0xf5, 0xb2, 0x8a, 0x90, 0xbc,
    0xfa, 0x1a, 0x24, 0x47, 0xe7, 0x34, 0x6f, 0x15, 0x80, 0x4a, 0xd8, 0xa2, 0x5a, 0x91, 0x4f, 0x7e,
    0x35, 0x83, 0x29, 0x01, 0x18, 0x35, 0x82, 0x29, 0x01, 0x24, 0x02, 0x05, 0x18, 0x35, 0x84, 0x29,
    0x01, 0x36, 0x02, 0x04, 0x02, 0x04, 0x01, 0x18, 0x18, 0x35, 0x81, 0x30, 0x02, 0x08, 0x48, 0x25,
    0x80, 0x28, 0x2d, 0xf3, 0xca, 0x89, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x46, 0xf3, 0xf1, 0xaf,
    0xde, 0x30, 0x78, 0x9f, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1d, 0x00, 0x87, 0xda, 0x4d, 0x7a, 0xcb,
    0x4c, 0x17, 0x0f, 0x57, 0x95, 0x16, 0x95, 0xc0, 0xd6, 0xa8, 0x9f, 0x6e, 0x5c, 0x3c, 0xcf, 0x6c,
    0xe7, 0x14, 0xcc, 0xf8, 0xd5, 0x17, 0x91, 0x30, 0x02, 0x1c, 0x7a, 0xbf, 0x6a, 0xf1, 0x00, 0xa1,
    0x84, 0x67, 0x14, 0xf5, 0xf3, 0xfa, 0x69, 0x38, 0xa0, 0x1f, 0xad, 0xaa, 0x24, 0xfb, 0xb6, 0x24,
    0xbd, 0x3e, 0xa7, 0xa4, 0xa4, 0x00, 0x18, 0x18,
};

extern const size_t sTestCertLength_Dev_SHA256_Weave = sizeof(sTestCert_Dev_SHA256_Weave);

extern const uint8_t sTestCert_Dev_SHA256_DER[] =
{
    0x30, 0x82, 0x01, 0x91, 0x30, 0x82, 0x01, 0x3f, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x08,
    0x27, 0x0e, 0x7d, 0x44, 0x0a, 0x97, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01,
    0x82, 0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30, 0x45, 0x45, 0x46,
    0x46, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x34, 0x32,
    0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x35, 0x32, 0x33,
    0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b,
    0x06, 0x01, 0x04, 0x01, 0x82, 0xc3, 0x2b, 0x01, 0x01, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33,
    0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x4e, 0x30, 0x10, 0x06,
    0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x21, 0x03,
    0x3a, 0x00, 0x04, 0x42, 0x7d, 0xc9, 0xdc, 0xbe, 0x86, 0x87, 0x48, 0x7b, 0x41, 0x05, 0x5f, 0x4f,
    0xdb, 0x7f, 0x91, 0xbe, 0x1b, 0x53, 0x91, 0x5e, 0x01, 0xab, 0x75, 0xd8, 0xe1, 0x85, 0xf6, 0x21,
    0xb1, 0x1d, 0xc3, 0x93, 0x05, 0x48, 0xf5, 0xb2, 0x8a, 0x90, 0xbc, 0xfa, 0x1a, 0x24, 0x47, 0xe7,
    0x34, 0x6f, 0x15, 0x80, 0x4a, 0xd8, 0xa2, 0x5a, 0x91, 0x4f, 0x7e, 0xa3, 0x6a, 0x30, 0x68, 0x30,
    0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06,
    0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x05, 0xa0, 0x30, 0x20, 0x06,
    0x03, 0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x16, 0x30, 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01,
    0x05, 0x05, 0x07, 0x03, 0x02, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30,
    0x11, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x0a, 0x04, 0x08, 0x48, 0x25, 0x80, 0x28, 0x2d, 0xf3,
    0xca, 0x89, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x0c, 0x30, 0x0a, 0x80, 0x08, 0x46,
    0xf3, 0xf1, 0xaf, 0xde, 0x30, 0x78, 0x9f, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x03, 0x02, 0x03, 0x40, 0x00, 0x30, 0x3d, 0x02, 0x1d, 0x00, 0x87, 0xda, 0x4d, 0x7a, 0xcb,
    0x4c, 0x17, 0x0f, 0x57, 0x95, 0x16, 0x95, 0xc0, 0xd6, 0xa8, 0x9f, 0x6e, 0x5c, 0x3c, 0xcf, 0x6c,
    0xe7, 0x14, 0xcc, 0xf8, 0xd5, 0x17, 0x91, 0x02, 0x1c, 0x7a, 0xbf, 0x6a, 0xf1, 0x00, 0xa1, 0x84,
    0x67, 0x14, 0xf5, 0xf3, 0xfa, 0x69, 0x38, 0xa0, 0x1f, 0xad, 0xaa, 0x24, 0xfb, 0xb6, 0x24, 0xbd,
    0x3e, 0xa7, 0xa4, 0xa4, 0x00,
};

extern const size_t sTestCertLength_Dev_SHA256_DER = sizeof(sTestCert_Dev_SHA256_DER);




/*
    SelfSigned Certificate
        Data:
            Version: 3 (0x2)
            Serial Number: 8692704829847256307 (0x78a2b0fca05e3cf3)
        Signature Algorithm: ecdsa-with-SHA1
            Issuer: CN=DUMMY-ACCOUNT-ID
            Validity
                Not Before: Apr 24 00:00:00 2016 GMT
                Not After : May 23 23:59:59 2016 GMT
            Subject: CN=DUMMY-ACCOUNT-ID
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (256 bit)
                    pub:
                        04:0e:7a:a3:9d:ab:7a:ab:28:90:04:5c:c2:07:db:
                        b9:02:d8:5d:26:aa:05:f5:5f:1b:90:ca:09:43:82:
                        11:a9:42:d4:e5:d2:cd:bb:85:f5:98:ab:69:cd:5c:
                        51:a3:6e:f4:9a:ca:82:d1:3d:cd:b6:03:d2:6b:fa:
                        e8:81:6a:2f:3b
                    ASN1 OID: prime256v1
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:FALSE
                X509v3 Key Usage: critical
                    Digital Signature, Key Encipherment
                X509v3 Extended Key Usage: critical
                    TLS Web Client Authentication, TLS Web Server Authentication
                X509v3 Subject Key Identifier:
                    4A:42:07:A8:B0:14:C3:7B
                X509v3 Authority Key Identifier:
                    keyid:4A:42:07:A8:B0:14:C3:7B

        Signature Algorithm: ecdsa-with-SHA1
             30:45:02:21:00:9e:55:3f:d7:a0:12:47:a5:87:39:de:ef:a9:
             1d:44:82:16:96:36:49:76:d2:ae:99:f2:1f:01:99:93:95:14:
             27:02:20:1b:24:be:30:f2:ef:53:0e:f7:cf:15:33:c0:c5:82:
             b6:00:2b:bc:f0:a6:23:7e:0a:92:dc:ba:b4:6e:6a:8a:d3

    -----BEGIN CERTIFICATE-----
    MIIBlDCCATugAwIBAgIIeKKw/KBePPMwCQYHKoZIzj0EATAbMRkwFwYDVQQDDBBE
    VU1NWS1BQ0NPVU5ULUlEMB4XDTE2MDQyNDAwMDAwMFoXDTE2MDUyMzIzNTk1OVow
    GzEZMBcGA1UEAwwQRFVNTVktQUNDT1VOVC1JRDBZMBMGByqGSM49AgEGCCqGSM49
    AwEHA0IABA56o52reqsokARcwgfbuQLYXSaqBfVfG5DKCUOCEalC1OXSzbuF9Zir
    ac1cUaNu9JrKgtE9zbYD0mv66IFqLzujajBoMAwGA1UdEwEB/wQCMAAwDgYDVR0P
    AQH/BAQDAgWgMCAGA1UdJQEB/wQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATARBgNV
    HQ4ECgQISkIHqLAUw3swEwYDVR0jBAwwCoAISkIHqLAUw3swCQYHKoZIzj0EAQNI
    ADBFAiEAnlU/16ASR6WHOd7vqR1EghaWNkl20q6Z8h8BmZOVFCcCIBskvjDy71MO
    988VM8DFgrYAK7zwpiN+CpLcurRuaorT
    -----END CERTIFICATE-----

    -----BEGIN EC PARAMETERS-----
    BggqhkjOPQMBBw==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MHcCAQEEIAFOFgLFAqHUta7tjiY+UPSqoz5BSjWGZ5u/GIHFH4gzoAoGCCqGSM49
    AwEHoUQDQgAEDnqjnat6qyiQBFzCB9u5AthdJqoF9V8bkMoJQ4IRqULU5dLNu4X1
    mKtpzVxRo270msqC0T3NtgPSa/rogWovOw==
    -----END EC PRIVATE KEY-----
 */

extern const uint8_t sTestCert_SelfSigned_Weave[] =
{
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x78, 0xa2, 0xb0, 0xfc, 0xa0, 0x5e,
    0x3c, 0xf3, 0x24, 0x02, 0x04, 0x37, 0x03, 0x2c, 0x01, 0x10, 0x44, 0x55, 0x4d, 0x4d, 0x59, 0x2d,
    0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x2d, 0x49, 0x44, 0x18, 0x26, 0x04, 0x00, 0xce, 0x3f,
    0x1f, 0x26, 0x05, 0x7f, 0xac, 0x68, 0x1f, 0x37, 0x06, 0x2c, 0x01, 0x10, 0x44, 0x55, 0x4d, 0x4d,
    0x59, 0x2d, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x2d, 0x49, 0x44, 0x18, 0x24, 0x07, 0x02,
    0x26, 0x08, 0x1b, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x41, 0x04, 0x0e, 0x7a, 0xa3, 0x9d, 0xab, 0x7a,
    0xab, 0x28, 0x90, 0x04, 0x5c, 0xc2, 0x07, 0xdb, 0xb9, 0x02, 0xd8, 0x5d, 0x26, 0xaa, 0x05, 0xf5,
    0x5f, 0x1b, 0x90, 0xca, 0x09, 0x43, 0x82, 0x11, 0xa9, 0x42, 0xd4, 0xe5, 0xd2, 0xcd, 0xbb, 0x85,
    0xf5, 0x98, 0xab, 0x69, 0xcd, 0x5c, 0x51, 0xa3, 0x6e, 0xf4, 0x9a, 0xca, 0x82, 0xd1, 0x3d, 0xcd,
    0xb6, 0x03, 0xd2, 0x6b, 0xfa, 0xe8, 0x81, 0x6a, 0x2f, 0x3b, 0x35, 0x83, 0x29, 0x01, 0x18, 0x35,
    0x82, 0x29, 0x01, 0x24, 0x02, 0x05, 0x18, 0x35, 0x84, 0x29, 0x01, 0x36, 0x02, 0x04, 0x02, 0x04,
    0x01, 0x18, 0x18, 0x35, 0x81, 0x30, 0x02, 0x08, 0x4a, 0x42, 0x07, 0xa8, 0xb0, 0x14, 0xc3, 0x7b,
    0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x4a, 0x42, 0x07, 0xa8, 0xb0, 0x14, 0xc3, 0x7b, 0x18, 0x35,
    0x0c, 0x30, 0x01, 0x21, 0x00, 0x9e, 0x55, 0x3f, 0xd7, 0xa0, 0x12, 0x47, 0xa5, 0x87, 0x39, 0xde,
    0xef, 0xa9, 0x1d, 0x44, 0x82, 0x16, 0x96, 0x36, 0x49, 0x76, 0xd2, 0xae, 0x99, 0xf2, 0x1f, 0x01,
    0x99, 0x93, 0x95, 0x14, 0x27, 0x30, 0x02, 0x20, 0x1b, 0x24, 0xbe, 0x30, 0xf2, 0xef, 0x53, 0x0e,
    0xf7, 0xcf, 0x15, 0x33, 0xc0, 0xc5, 0x82, 0xb6, 0x00, 0x2b, 0xbc, 0xf0, 0xa6, 0x23, 0x7e, 0x0a,
    0x92, 0xdc, 0xba, 0xb4, 0x6e, 0x6a, 0x8a, 0xd3, 0x18, 0x18,
};

extern const size_t sTestCertLength_SelfSigned_Weave = sizeof(sTestCert_SelfSigned_Weave);

extern const uint8_t sTestCert_SelfSigned_DER[] =
{
    0x30, 0x82, 0x01, 0x94, 0x30, 0x82, 0x01, 0x3b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x78,
    0xa2, 0xb0, 0xfc, 0xa0, 0x5e, 0x3c, 0xf3, 0x30, 0x09, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x01, 0x30, 0x1b, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x10, 0x44,
    0x55, 0x4d, 0x4d, 0x59, 0x2d, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x2d, 0x49, 0x44, 0x30,
    0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x34, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a,
    0x17, 0x0d, 0x31, 0x36, 0x30, 0x35, 0x32, 0x33, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30,
    0x1b, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x10, 0x44, 0x55, 0x4d, 0x4d,
    0x59, 0x2d, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x2d, 0x49, 0x44, 0x30, 0x59, 0x30, 0x13,
    0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x0e, 0x7a, 0xa3, 0x9d, 0xab, 0x7a, 0xab, 0x28, 0x90,
    0x04, 0x5c, 0xc2, 0x07, 0xdb, 0xb9, 0x02, 0xd8, 0x5d, 0x26, 0xaa, 0x05, 0xf5, 0x5f, 0x1b, 0x90,
    0xca, 0x09, 0x43, 0x82, 0x11, 0xa9, 0x42, 0xd4, 0xe5, 0xd2, 0xcd, 0xbb, 0x85, 0xf5, 0x98, 0xab,
    0x69, 0xcd, 0x5c, 0x51, 0xa3, 0x6e, 0xf4, 0x9a, 0xca, 0x82, 0xd1, 0x3d, 0xcd, 0xb6, 0x03, 0xd2,
    0x6b, 0xfa, 0xe8, 0x81, 0x6a, 0x2f, 0x3b, 0xa3, 0x6a, 0x30, 0x68, 0x30, 0x0c, 0x06, 0x03, 0x55,
    0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f,
    0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x05, 0xa0, 0x30, 0x20, 0x06, 0x03, 0x55, 0x1d, 0x25,
    0x01, 0x01, 0xff, 0x04, 0x16, 0x30, 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03,
    0x02, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x11, 0x06, 0x03, 0x55,
    0x1d, 0x0e, 0x04, 0x0a, 0x04, 0x08, 0x4a, 0x42, 0x07, 0xa8, 0xb0, 0x14, 0xc3, 0x7b, 0x30, 0x13,
    0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x0c, 0x30, 0x0a, 0x80, 0x08, 0x4a, 0x42, 0x07, 0xa8, 0xb0,
    0x14, 0xc3, 0x7b, 0x30, 0x09, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x01, 0x03, 0x48,
    0x00, 0x30, 0x45, 0x02, 0x21, 0x00, 0x9e, 0x55, 0x3f, 0xd7, 0xa0, 0x12, 0x47, 0xa5, 0x87, 0x39,
    0xde, 0xef, 0xa9, 0x1d, 0x44, 0x82, 0x16, 0x96, 0x36, 0x49, 0x76, 0xd2, 0xae, 0x99, 0xf2, 0x1f,
    0x01, 0x99, 0x93, 0x95, 0x14, 0x27, 0x02, 0x20, 0x1b, 0x24, 0xbe, 0x30, 0xf2, 0xef, 0x53, 0x0e,
    0xf7, 0xcf, 0x15, 0x33, 0xc0, 0xc5, 0x82, 0xb6, 0x00, 0x2b, 0xbc, 0xf0, 0xa6, 0x23, 0x7e, 0x0a,
    0x92, 0xdc, 0xba, 0xb4, 0x6e, 0x6a, 0x8a, 0xd3,
};

extern const size_t sTestCertLength_SelfSigned_DER = sizeof(sTestCert_SelfSigned_DER);



/*
    SelfSigned_SHA256 Certificate
        Data:
            Version: 3 (0x2)
            Serial Number: 1023658669149478135 (0xe34c422d1e75cf7)
        Signature Algorithm: ecdsa-with-SHA256
            Issuer: CN=DUMMY-ACCOUNT-ID
            Validity
                Not Before: Apr 24 00:00:00 2016 GMT
                Not After : May 23 23:59:59 2016 GMT
            Subject: CN=DUMMY-ACCOUNT-ID
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (256 bit)
                    pub:
                        04:0e:7a:a3:9d:ab:7a:ab:28:90:04:5c:c2:07:db:
                        b9:02:d8:5d:26:aa:05:f5:5f:1b:90:ca:09:43:82:
                        11:a9:42:d4:e5:d2:cd:bb:85:f5:98:ab:69:cd:5c:
                        51:a3:6e:f4:9a:ca:82:d1:3d:cd:b6:03:d2:6b:fa:
                        e8:81:6a:2f:3b
                    ASN1 OID: prime256v1
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:FALSE
                X509v3 Key Usage: critical
                    Digital Signature, Key Encipherment
                X509v3 Extended Key Usage: critical
                    TLS Web Client Authentication, TLS Web Server Authentication
                X509v3 Subject Key Identifier:
                    4A:42:07:A8:B0:14:C3:7B
                X509v3 Authority Key Identifier:
                    keyid:4A:42:07:A8:B0:14:C3:7B

        Signature Algorithm: ecdsa-with-SHA256
             30:45:02:20:7e:dc:45:79:77:91:c7:ab:46:37:7c:92:9a:41:
             a8:99:eb:e4:17:d3:f7:07:3a:d8:6f:1a:9f:07:ee:f7:e4:4f:
             02:21:00:94:2d:a1:97:bf:16:9e:5e:98:9c:90:0a:c9:ab:36:
             85:b1:1d:dc:0b:9d:8e:85:90:02:75:7d:58:50:ca:b1:b5

    -----BEGIN CERTIFICATE-----
    MIIBljCCATygAwIBAgIIDjTEItHnXPcwCgYIKoZIzj0EAwIwGzEZMBcGA1UEAwwQ
    RFVNTVktQUNDT1VOVC1JRDAeFw0xNjA0MjQwMDAwMDBaFw0xNjA1MjMyMzU5NTla
    MBsxGTAXBgNVBAMMEERVTU1ZLUFDQ09VTlQtSUQwWTATBgcqhkjOPQIBBggqhkjO
    PQMBBwNCAAQOeqOdq3qrKJAEXMIH27kC2F0mqgX1XxuQyglDghGpQtTl0s27hfWY
    q2nNXFGjbvSayoLRPc22A9Jr+uiBai87o2owaDAMBgNVHRMBAf8EAjAAMA4GA1Ud
    DwEB/wQEAwIFoDAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEQYD
    VR0OBAoECEpCB6iwFMN7MBMGA1UdIwQMMAqACEpCB6iwFMN7MAoGCCqGSM49BAMC
    A0gAMEUCIH7cRXl3kcerRjd8kppBqJnr5BfT9wc62G8anwfu9+RPAiEAlC2hl78W
    nl6YnJAKyas2hbEd3AudjoWQAnV9WFDKsbU=
    -----END CERTIFICATE-----

    -----BEGIN EC PARAMETERS-----
    BggqhkjOPQMBBw==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MHcCAQEEIAFOFgLFAqHUta7tjiY+UPSqoz5BSjWGZ5u/GIHFH4gzoAoGCCqGSM49
    AwEHoUQDQgAEDnqjnat6qyiQBFzCB9u5AthdJqoF9V8bkMoJQ4IRqULU5dLNu4X1
    mKtpzVxRo270msqC0T3NtgPSa/rogWovOw==
    -----END EC PRIVATE KEY-----
 */

extern const uint8_t sTestCert_SelfSigned_SHA256_Weave[] =
{
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x0e, 0x34, 0xc4, 0x22, 0xd1, 0xe7,
    0x5c, 0xf7, 0x24, 0x02, 0x05, 0x37, 0x03, 0x2c, 0x01, 0x10, 0x44, 0x55, 0x4d, 0x4d, 0x59, 0x2d,
    0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x2d, 0x49, 0x44, 0x18, 0x26, 0x04, 0x00, 0xce, 0x3f,
    0x1f, 0x26, 0x05, 0x7f, 0xac, 0x68, 0x1f, 0x37, 0x06, 0x2c, 0x01, 0x10, 0x44, 0x55, 0x4d, 0x4d,
    0x59, 0x2d, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x2d, 0x49, 0x44, 0x18, 0x24, 0x07, 0x02,
    0x26, 0x08, 0x1b, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x41, 0x04, 0x0e, 0x7a, 0xa3, 0x9d, 0xab, 0x7a,
    0xab, 0x28, 0x90, 0x04, 0x5c, 0xc2, 0x07, 0xdb, 0xb9, 0x02, 0xd8, 0x5d, 0x26, 0xaa, 0x05, 0xf5,
    0x5f, 0x1b, 0x90, 0xca, 0x09, 0x43, 0x82, 0x11, 0xa9, 0x42, 0xd4, 0xe5, 0xd2, 0xcd, 0xbb, 0x85,
    0xf5, 0x98, 0xab, 0x69, 0xcd, 0x5c, 0x51, 0xa3, 0x6e, 0xf4, 0x9a, 0xca, 0x82, 0xd1, 0x3d, 0xcd,
    0xb6, 0x03, 0xd2, 0x6b, 0xfa, 0xe8, 0x81, 0x6a, 0x2f, 0x3b, 0x35, 0x83, 0x29, 0x01, 0x18, 0x35,
    0x82, 0x29, 0x01, 0x24, 0x02, 0x05, 0x18, 0x35, 0x84, 0x29, 0x01, 0x36, 0x02, 0x04, 0x02, 0x04,
    0x01, 0x18, 0x18, 0x35, 0x81, 0x30, 0x02, 0x08, 0x4a, 0x42, 0x07, 0xa8, 0xb0, 0x14, 0xc3, 0x7b,
    0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x4a, 0x42, 0x07, 0xa8, 0xb0, 0x14, 0xc3, 0x7b, 0x18, 0x35,
    0x0c, 0x30, 0x01, 0x20, 0x7e, 0xdc, 0x45, 0x79, 0x77, 0x91, 0xc7, 0xab, 0x46, 0x37, 0x7c, 0x92,
    0x9a, 0x41, 0xa8, 0x99, 0xeb, 0xe4, 0x17, 0xd3, 0xf7, 0x07, 0x3a, 0xd8, 0x6f, 0x1a, 0x9f, 0x07,
    0xee, 0xf7, 0xe4, 0x4f, 0x30, 0x02, 0x21, 0x00, 0x94, 0x2d, 0xa1, 0x97, 0xbf, 0x16, 0x9e, 0x5e,
    0x98, 0x9c, 0x90, 0x0a, 0xc9, 0xab, 0x36, 0x85, 0xb1, 0x1d, 0xdc, 0x0b, 0x9d, 0x8e, 0x85, 0x90,
    0x02, 0x75, 0x7d, 0x58, 0x50, 0xca, 0xb1, 0xb5, 0x18, 0x18,
};

extern const size_t sTestCertLength_SelfSigned_SHA256_Weave = sizeof(sTestCert_SelfSigned_SHA256_Weave);

extern const uint8_t sTestCert_SelfSigned_SHA256_DER[] =
{
    0x30, 0x82, 0x01, 0x96, 0x30, 0x82, 0x01, 0x3c, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x0e,
    0x34, 0xc4, 0x22, 0xd1, 0xe7, 0x5c, 0xf7, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x03, 0x02, 0x30, 0x1b, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x10,
    0x44, 0x55, 0x4d, 0x4d, 0x59, 0x2d, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x2d, 0x49, 0x44,
    0x30, 0x1e, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x34, 0x32, 0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
    0x5a, 0x17, 0x0d, 0x31, 0x36, 0x30, 0x35, 0x32, 0x33, 0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a,
    0x30, 0x1b, 0x31, 0x19, 0x30, 0x17, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x10, 0x44, 0x55, 0x4d,
    0x4d, 0x59, 0x2d, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x2d, 0x49, 0x44, 0x30, 0x59, 0x30,
    0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce,
    0x3d, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x0e, 0x7a, 0xa3, 0x9d, 0xab, 0x7a, 0xab, 0x28,
    0x90, 0x04, 0x5c, 0xc2, 0x07, 0xdb, 0xb9, 0x02, 0xd8, 0x5d, 0x26, 0xaa, 0x05, 0xf5, 0x5f, 0x1b,
    0x90, 0xca, 0x09, 0x43, 0x82, 0x11, 0xa9, 0x42, 0xd4, 0xe5, 0xd2, 0xcd, 0xbb, 0x85, 0xf5, 0x98,
    0xab, 0x69, 0xcd, 0x5c, 0x51, 0xa3, 0x6e, 0xf4, 0x9a, 0xca, 0x82, 0xd1, 0x3d, 0xcd, 0xb6, 0x03,
    0xd2, 0x6b, 0xfa, 0xe8, 0x81, 0x6a, 0x2f, 0x3b, 0xa3, 0x6a, 0x30, 0x68, 0x30, 0x0c, 0x06, 0x03,
    0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d,
    0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x05, 0xa0, 0x30, 0x20, 0x06, 0x03, 0x55, 0x1d,
    0x25, 0x01, 0x01, 0xff, 0x04, 0x16, 0x30, 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07,
    0x03, 0x02, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x11, 0x06, 0x03,
    0x55, 0x1d, 0x0e, 0x04, 0x0a, 0x04, 0x08, 0x4a, 0x42, 0x07, 0xa8, 0xb0, 0x14, 0xc3, 0x7b, 0x30,
    0x13, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x0c, 0x30, 0x0a, 0x80, 0x08, 0x4a, 0x42, 0x07, 0xa8,
    0xb0, 0x14, 0xc3, 0x7b, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02,
    0x03, 0x48, 0x00, 0x30, 0x45, 0x02, 0x20, 0x7e, 0xdc, 0x45, 0x79, 0x77, 0x91, 0xc7, 0xab, 0x46,
    0x37, 0x7c, 0x92, 0x9a, 0x41, 0xa8, 0x99, 0xeb, 0xe4, 0x17, 0xd3, 0xf7, 0x07, 0x3a, 0xd8, 0x6f,
    0x1a, 0x9f, 0x07, 0xee, 0xf7, 0xe4, 0x4f, 0x02, 0x21, 0x00, 0x94, 0x2d, 0xa1, 0x97, 0xbf, 0x16,
    0x9e, 0x5e, 0x98, 0x9c, 0x90, 0x0a, 0xc9, 0xab, 0x36, 0x85, 0xb1, 0x1d, 0xdc, 0x0b, 0x9d, 0x8e,
    0x85, 0x90, 0x02, 0x75, 0x7d, 0x58, 0x50, 0xca, 0xb1, 0xb5,
};

extern const size_t sTestCertLength_SelfSigned_SHA256_DER = sizeof(sTestCert_SelfSigned_SHA256_DER);



/*
    ServiceEndpoint Certificate
        Data:
            Version: 3 (0x2)
            Serial Number: 1491904948006265161 (0x14b44fa5508fa149)
        Signature Algorithm: ecdsa-with-SHA1
            Issuer: 1.3.6.1.4.1.41387.1.3=18B430EEEE000003
            Validity
                Not Before: Oct 24 20:03:58 2013 GMT
                Not After : Oct 22 20:03:58 2023 GMT
            Subject: 1.3.6.1.4.1.41387.1.2=18B4300200000001
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (224 bit)
                    pub:
                        04:ca:89:25:34:ea:94:d3:d7:de:66:17:63:73:b0:
                        e9:dd:8e:b0:b1:b8:15:48:ce:50:19:7c:bb:67:fe:
                        39:9a:0f:7d:fe:f2:ce:69:96:69:69:c6:20:29:cd:
                        74:71:c7:ed:53:73:c4:97:a0:c4:8e:c2
                    ASN1 OID: secp224r1
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:FALSE
                X509v3 Key Usage: critical
                    Digital Signature, Key Encipherment
                X509v3 Extended Key Usage: critical
                    TLS Web Client Authentication, TLS Web Server Authentication
                X509v3 Subject Key Identifier:
                    4D:E9:F9:22:D1:0E:1F:12
                X509v3 Authority Key Identifier:
                    keyid:43:6F:1C:63:84:2A:88:58

        Signature Algorithm: ecdsa-with-SHA1
             30:3d:02:1c:4e:6d:cc:e0:3c:3d:ce:c7:0c:ba:04:d7:61:02:
             b6:48:5f:38:1c:90:a7:e8:39:68:2d:b7:25:cc:02:1d:00:aa:
             a8:99:07:ed:e2:8a:78:2c:dc:c8:3c:7b:5e:86:03:fa:ca:a5:
             28:2c:86:39:58:8f:ff:d8:9b

    -----BEGIN CERTIFICATE-----
    MIIBjzCCAT6gAwIBAgIIFLRPpVCPoUkwCQYHKoZIzj0EATAiMSAwHgYKKwYBBAGC
    wysBAwwQMThCNDMwRUVFRTAwMDAwMzAeFw0xMzEwMjQyMDAzNThaFw0yMzEwMjIy
    MDAzNThaMCIxIDAeBgorBgEEAYLDKwECDBAxOEI0MzAwMjAwMDAwMDAxME4wEAYH
    KoZIzj0CAQYFK4EEACEDOgAEyoklNOqU09feZhdjc7Dp3Y6wsbgVSM5QGXy7Z/45
    mg99/vLOaZZpacYgKc10ccftU3PEl6DEjsKjajBoMAwGA1UdEwEB/wQCMAAwDgYD
    VR0PAQH/BAQDAgWgMCAGA1UdJQEB/wQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAR
    BgNVHQ4ECgQITen5ItEOHxIwEwYDVR0jBAwwCoAIQ28cY4QqiFgwCQYHKoZIzj0E
    AQNAADA9AhxObczgPD3Oxwy6BNdhArZIXzgckKfoOWgttyXMAh0AqqiZB+3iings
    3Mg8e16GA/rKpSgshjlYj//Ymw==
    -----END CERTIFICATE-----

    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHKpfGiiZaRz2czw592RC9P8SQaxJvstz8649HOWgBwYFK4EEACGhPAM6
    AATKiSU06pTT195mF2NzsOndjrCxuBVIzlAZfLtn/jmaD33+8s5plmlpxiApzXRx
    x+1Tc8SXoMSOwg==
    -----END EC PRIVATE KEY-----
 */

extern const uint8_t sTestCert_ServiceEndpoint_Weave[] =
{
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x14, 0xb4, 0x4f, 0xa5, 0x50, 0x8f,
    0xa1, 0x49, 0x24, 0x02, 0x04, 0x37, 0x03, 0x27, 0x13, 0x03, 0x00, 0x00, 0xee, 0xee, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x2e, 0xd5, 0x76, 0x1a, 0x26, 0x05, 0x2e, 0x7e, 0x9c, 0x2d, 0x37, 0x06,
    0x27, 0x12, 0x01, 0x00, 0x00, 0x00, 0x02, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0xca, 0x89, 0x25, 0x34, 0xea, 0x94, 0xd3, 0xd7,
    0xde, 0x66, 0x17, 0x63, 0x73, 0xb0, 0xe9, 0xdd, 0x8e, 0xb0, 0xb1, 0xb8, 0x15, 0x48, 0xce, 0x50,
    0x19, 0x7c, 0xbb, 0x67, 0xfe, 0x39, 0x9a, 0x0f, 0x7d, 0xfe, 0xf2, 0xce, 0x69, 0x96, 0x69, 0x69,
    0xc6, 0x20, 0x29, 0xcd, 0x74, 0x71, 0xc7, 0xed, 0x53, 0x73, 0xc4, 0x97, 0xa0, 0xc4, 0x8e, 0xc2,
    0x35, 0x83, 0x29, 0x01, 0x18, 0x35, 0x82, 0x29, 0x01, 0x24, 0x02, 0x05, 0x18, 0x35, 0x84, 0x29,
    0x01, 0x36, 0x02, 0x04, 0x02, 0x04, 0x01, 0x18, 0x18, 0x35, 0x81, 0x30, 0x02, 0x08, 0x4d, 0xe9,
    0xf9, 0x22, 0xd1, 0x0e, 0x1f, 0x12, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x43, 0x6f, 0x1c, 0x63,
    0x84, 0x2a, 0x88, 0x58, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1c, 0x4e, 0x6d, 0xcc, 0xe0, 0x3c, 0x3d,
    0xce, 0xc7, 0x0c, 0xba, 0x04, 0xd7, 0x61, 0x02, 0xb6, 0x48, 0x5f, 0x38, 0x1c, 0x90, 0xa7, 0xe8,
    0x39, 0x68, 0x2d, 0xb7, 0x25, 0xcc, 0x30, 0x02, 0x1d, 0x00, 0xaa, 0xa8, 0x99, 0x07, 0xed, 0xe2,
    0x8a, 0x78, 0x2c, 0xdc, 0xc8, 0x3c, 0x7b, 0x5e, 0x86, 0x03, 0xfa, 0xca, 0xa5, 0x28, 0x2c, 0x86,
    0x39, 0x58, 0x8f, 0xff, 0xd8, 0x9b, 0x18, 0x18,
};

extern const size_t sTestCertLength_ServiceEndpoint_Weave = sizeof(sTestCert_ServiceEndpoint_Weave);

extern const uint8_t sTestCert_ServiceEndpoint_DER[] =
{
    0x30, 0x82, 0x01, 0x8f, 0x30, 0x82, 0x01, 0x3e, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x14,
    0xb4, 0x4f, 0xa5, 0x50, 0x8f, 0xa1, 0x49, 0x30, 0x09, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x01, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82,
    0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30, 0x45, 0x45, 0x45, 0x45,
    0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x31, 0x30, 0x32, 0x34,
    0x32, 0x30, 0x30, 0x33, 0x35, 0x38, 0x5a, 0x17, 0x0d, 0x32, 0x33, 0x31, 0x30, 0x32, 0x32, 0x32,
    0x30, 0x30, 0x33, 0x35, 0x38, 0x5a, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06,
    0x01, 0x04, 0x01, 0x82, 0xc3, 0x2b, 0x01, 0x02, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30,
    0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x4e, 0x30, 0x10, 0x06, 0x07,
    0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x21, 0x03, 0x3a,
    0x00, 0x04, 0xca, 0x89, 0x25, 0x34, 0xea, 0x94, 0xd3, 0xd7, 0xde, 0x66, 0x17, 0x63, 0x73, 0xb0,
    0xe9, 0xdd, 0x8e, 0xb0, 0xb1, 0xb8, 0x15, 0x48, 0xce, 0x50, 0x19, 0x7c, 0xbb, 0x67, 0xfe, 0x39,
    0x9a, 0x0f, 0x7d, 0xfe, 0xf2, 0xce, 0x69, 0x96, 0x69, 0x69, 0xc6, 0x20, 0x29, 0xcd, 0x74, 0x71,
    0xc7, 0xed, 0x53, 0x73, 0xc4, 0x97, 0xa0, 0xc4, 0x8e, 0xc2, 0xa3, 0x6a, 0x30, 0x68, 0x30, 0x0c,
    0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06, 0x03,
    0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x05, 0xa0, 0x30, 0x20, 0x06, 0x03,
    0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x16, 0x30, 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05,
    0x05, 0x07, 0x03, 0x02, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30, 0x11,
    0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x0a, 0x04, 0x08, 0x4d, 0xe9, 0xf9, 0x22, 0xd1, 0x0e, 0x1f,
    0x12, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x0c, 0x30, 0x0a, 0x80, 0x08, 0x43, 0x6f,
    0x1c, 0x63, 0x84, 0x2a, 0x88, 0x58, 0x30, 0x09, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04,
    0x01, 0x03, 0x40, 0x00, 0x30, 0x3d, 0x02, 0x1c, 0x4e, 0x6d, 0xcc, 0xe0, 0x3c, 0x3d, 0xce, 0xc7,
    0x0c, 0xba, 0x04, 0xd7, 0x61, 0x02, 0xb6, 0x48, 0x5f, 0x38, 0x1c, 0x90, 0xa7, 0xe8, 0x39, 0x68,
    0x2d, 0xb7, 0x25, 0xcc, 0x02, 0x1d, 0x00, 0xaa, 0xa8, 0x99, 0x07, 0xed, 0xe2, 0x8a, 0x78, 0x2c,
    0xdc, 0xc8, 0x3c, 0x7b, 0x5e, 0x86, 0x03, 0xfa, 0xca, 0xa5, 0x28, 0x2c, 0x86, 0x39, 0x58, 0x8f,
    0xff, 0xd8, 0x9b,
};

extern const size_t sTestCertLength_ServiceEndpoint_DER = sizeof(sTestCert_ServiceEndpoint_DER);



/*
    ServiceEndpoint_SHA256 Certificate
        Data:
            Version: 3 (0x2)
            Serial Number: 1755460528146439725 (0x185ca60cad635e2d)
        Signature Algorithm: ecdsa-with-SHA256
            Issuer: 1.3.6.1.4.1.41387.1.3=18B430EEEE000003
            Validity
                Not Before: Oct 24 00:00:00 2013 GMT
                Not After : Oct 22 23:59:59 2023 GMT
            Subject: 1.3.6.1.4.1.41387.1.2=18B4300200000001
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (224 bit)
                    pub:
                        04:ca:89:25:34:ea:94:d3:d7:de:66:17:63:73:b0:
                        e9:dd:8e:b0:b1:b8:15:48:ce:50:19:7c:bb:67:fe:
                        39:9a:0f:7d:fe:f2:ce:69:96:69:69:c6:20:29:cd:
                        74:71:c7:ed:53:73:c4:97:a0:c4:8e:c2
                    ASN1 OID: secp224r1
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:FALSE
                X509v3 Key Usage: critical
                    Digital Signature, Key Encipherment
                X509v3 Extended Key Usage: critical
                    TLS Web Client Authentication, TLS Web Server Authentication
                X509v3 Subject Key Identifier:
                    4D:E9:F9:22:D1:0E:1F:12
                X509v3 Authority Key Identifier:
                    keyid:43:6F:1C:63:84:2A:88:58

        Signature Algorithm: ecdsa-with-SHA256
             30:3d:02:1d:00:b6:5a:4c:81:04:80:ff:6c:1d:d9:ff:1d:f6:
             3c:89:73:64:14:bc:62:cd:e6:6f:80:89:58:d6:70:02:1c:19:
             bf:79:7c:0e:9d:83:c3:b5:0a:d0:ca:77:f8:3c:c3:00:e5:72:
             78:28:5b:a8:72:51:84:22:16

    -----BEGIN CERTIFICATE-----
    MIIBkTCCAT+gAwIBAgIIGFymDK1jXi0wCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMEVFRUUwMDAwMDMwHhcNMTMxMDI0MDAwMDAwWhcNMjMxMDIy
    MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBAgwQMThCNDMwMDIwMDAwMDAwMTBOMBAG
    ByqGSM49AgEGBSuBBAAhAzoABMqJJTTqlNPX3mYXY3Ow6d2OsLG4FUjOUBl8u2f+
    OZoPff7yzmmWaWnGICnNdHHH7VNzxJegxI7Co2owaDAMBgNVHRMBAf8EAjAAMA4G
    A1UdDwEB/wQEAwIFoDAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
    EQYDVR0OBAoECE3p+SLRDh8SMBMGA1UdIwQMMAqACENvHGOEKohYMAoGCCqGSM49
    BAMCA0AAMD0CHQC2WkyBBID/bB3Z/x32PIlzZBS8Ys3mb4CJWNZwAhwZv3l8Dp2D
    w7UK0Mp3+DzDAOVyeChbqHJRhCIW
    -----END CERTIFICATE-----

    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHKpfGiiZaRz2czw592RC9P8SQaxJvstz8649HOWgBwYFK4EEACGhPAM6
    AATKiSU06pTT195mF2NzsOndjrCxuBVIzlAZfLtn/jmaD33+8s5plmlpxiApzXRx
    x+1Tc8SXoMSOwg==
    -----END EC PRIVATE KEY-----
 */

extern const uint8_t sTestCert_ServiceEndpoint_SHA256_Weave[] =
{
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x18, 0x5c, 0xa6, 0x0c, 0xad, 0x63,
    0x5e, 0x2d, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x03, 0x00, 0x00, 0xee, 0xee, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x00, 0xbb, 0x75, 0x1a, 0x26, 0x05, 0x7f, 0xb5, 0x9c, 0x2d, 0x37, 0x06,
    0x27, 0x12, 0x01, 0x00, 0x00, 0x00, 0x02, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0xca, 0x89, 0x25, 0x34, 0xea, 0x94, 0xd3, 0xd7,
    0xde, 0x66, 0x17, 0x63, 0x73, 0xb0, 0xe9, 0xdd, 0x8e, 0xb0, 0xb1, 0xb8, 0x15, 0x48, 0xce, 0x50,
    0x19, 0x7c, 0xbb, 0x67, 0xfe, 0x39, 0x9a, 0x0f, 0x7d, 0xfe, 0xf2, 0xce, 0x69, 0x96, 0x69, 0x69,
    0xc6, 0x20, 0x29, 0xcd, 0x74, 0x71, 0xc7, 0xed, 0x53, 0x73, 0xc4, 0x97, 0xa0, 0xc4, 0x8e, 0xc2,
    0x35, 0x83, 0x29, 0x01, 0x18, 0x35, 0x82, 0x29, 0x01, 0x24, 0x02, 0x05, 0x18, 0x35, 0x84, 0x29,
    0x01, 0x36, 0x02, 0x04, 0x02, 0x04, 0x01, 0x18, 0x18, 0x35, 0x81, 0x30, 0x02, 0x08, 0x4d, 0xe9,
    0xf9, 0x22, 0xd1, 0x0e, 0x1f, 0x12, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x43, 0x6f, 0x1c, 0x63,
    0x84, 0x2a, 0x88, 0x58, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1d, 0x00, 0xb6, 0x5a, 0x4c, 0x81, 0x04,
    0x80, 0xff, 0x6c, 0x1d, 0xd9, 0xff, 0x1d, 0xf6, 0x3c, 0x89, 0x73, 0x64, 0x14, 0xbc, 0x62, 0xcd,
    0xe6, 0x6f, 0x80, 0x89, 0x58, 0xd6, 0x70, 0x30, 0x02, 0x1c, 0x19, 0xbf, 0x79, 0x7c, 0x0e, 0x9d,
    0x83, 0xc3, 0xb5, 0x0a, 0xd0, 0xca, 0x77, 0xf8, 0x3c, 0xc3, 0x00, 0xe5, 0x72, 0x78, 0x28, 0x5b,
    0xa8, 0x72, 0x51, 0x84, 0x22, 0x16, 0x18, 0x18,
};

extern const size_t sTestCertLength_ServiceEndpoint_SHA256_Weave = sizeof(sTestCert_ServiceEndpoint_SHA256_Weave);

extern const uint8_t sTestCert_ServiceEndpoint_SHA256_DER[] =
{
    0x30, 0x82, 0x01, 0x91, 0x30, 0x82, 0x01, 0x3f, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x18,
    0x5c, 0xa6, 0x0c, 0xad, 0x63, 0x5e, 0x2d, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01,
    0x82, 0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30, 0x45, 0x45, 0x45,
    0x45, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x31, 0x30, 0x32,
    0x34, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x33, 0x31, 0x30, 0x32, 0x32,
    0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b,
    0x06, 0x01, 0x04, 0x01, 0x82, 0xc3, 0x2b, 0x01, 0x02, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33,
    0x30, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x4e, 0x30, 0x10, 0x06,
    0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x21, 0x03,
    0x3a, 0x00, 0x04, 0xca, 0x89, 0x25, 0x34, 0xea, 0x94, 0xd3, 0xd7, 0xde, 0x66, 0x17, 0x63, 0x73,
    0xb0, 0xe9, 0xdd, 0x8e, 0xb0, 0xb1, 0xb8, 0x15, 0x48, 0xce, 0x50, 0x19, 0x7c, 0xbb, 0x67, 0xfe,
    0x39, 0x9a, 0x0f, 0x7d, 0xfe, 0xf2, 0xce, 0x69, 0x96, 0x69, 0x69, 0xc6, 0x20, 0x29, 0xcd, 0x74,
    0x71, 0xc7, 0xed, 0x53, 0x73, 0xc4, 0x97, 0xa0, 0xc4, 0x8e, 0xc2, 0xa3, 0x6a, 0x30, 0x68, 0x30,
    0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06,
    0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x05, 0xa0, 0x30, 0x20, 0x06,
    0x03, 0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x16, 0x30, 0x14, 0x06, 0x08, 0x2b, 0x06, 0x01,
    0x05, 0x05, 0x07, 0x03, 0x02, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01, 0x30,
    0x11, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x0a, 0x04, 0x08, 0x4d, 0xe9, 0xf9, 0x22, 0xd1, 0x0e,
    0x1f, 0x12, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x0c, 0x30, 0x0a, 0x80, 0x08, 0x43,
    0x6f, 0x1c, 0x63, 0x84, 0x2a, 0x88, 0x58, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x03, 0x02, 0x03, 0x40, 0x00, 0x30, 0x3d, 0x02, 0x1d, 0x00, 0xb6, 0x5a, 0x4c, 0x81, 0x04,
    0x80, 0xff, 0x6c, 0x1d, 0xd9, 0xff, 0x1d, 0xf6, 0x3c, 0x89, 0x73, 0x64, 0x14, 0xbc, 0x62, 0xcd,
    0xe6, 0x6f, 0x80, 0x89, 0x58, 0xd6, 0x70, 0x02, 0x1c, 0x19, 0xbf, 0x79, 0x7c, 0x0e, 0x9d, 0x83,
    0xc3, 0xb5, 0x0a, 0xd0, 0xca, 0x77, 0xf8, 0x3c, 0xc3, 0x00, 0xe5, 0x72, 0x78, 0x28, 0x5b, 0xa8,
    0x72, 0x51, 0x84, 0x22, 0x16,
};

extern const size_t sTestCertLength_ServiceEndpoint_SHA256_DER = sizeof(sTestCert_ServiceEndpoint_SHA256_DER);




/*
    FirmwareSigning Certificate
        Data:
            Version: 3 (0x2)
            Serial Number: 3449636073301882938 (0x2fdf91bb5188383a)
        Signature Algorithm: ecdsa-with-SHA1
            Issuer: 1.3.6.1.4.1.41387.1.3=18B430EEEE000004
            Validity
                Not Before: Oct 18 01:59:50 2013 GMT
                Not After : Oct 16 01:59:50 2023 GMT
            Subject: 1.3.6.1.4.1.41387.1.4=18B4300302000001
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (224 bit)
                    pub:
                        04:93:3b:eb:66:b4:ce:f5:3a:2f:6a:4b:d6:80:94:
                        ff:bf:eb:9b:14:b7:c0:41:45:f2:7a:93:f5:37:12:
                        53:6b:8d:b5:93:92:55:5b:f6:87:7a:12:8b:7e:aa:
                        5b:ee:06:38:d2:3f:cd:52:7b:36:3a:eb
                    ASN1 OID: secp224r1
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:FALSE
                X509v3 Key Usage: critical
                    Digital Signature
                X509v3 Extended Key Usage: critical
                    Code Signing
                X509v3 Subject Key Identifier:
                    44:80:50:DD:02:39:C0:41
                X509v3 Authority Key Identifier:
                    keyid:49:82:8F:69:F6:D1:D8:5A

        Signature Algorithm: ecdsa-with-SHA1
             30:3c:02:1c:07:26:ba:84:81:8a:a2:6c:76:93:e0:da:20:94:
             88:04:51:d7:23:ab:5c:31:1f:f8:52:0a:2f:00:02:1c:7c:ff:
             40:0d:41:38:f3:a1:26:e2:e6:70:8d:e5:6c:48:cd:1d:33:43:
             c7:4f:95:a3:5a:b5:40:68

    -----BEGIN CERTIFICATE-----
    MIIBhDCCATSgAwIBAgIIL9+Ru1GIODowCQYHKoZIzj0EATAiMSAwHgYKKwYBBAGC
    wysBAwwQMThCNDMwRUVFRTAwMDAwNDAeFw0xMzEwMTgwMTU5NTBaFw0yMzEwMTYw
    MTU5NTBaMCIxIDAeBgorBgEEAYLDKwEEDBAxOEI0MzAwMzAyMDAwMDAxME4wEAYH
    KoZIzj0CAQYFK4EEACEDOgAEkzvrZrTO9TovakvWgJT/v+ubFLfAQUXyepP1NxJT
    a421k5JVW/aHehKLfqpb7gY40j/NUns2OuujYDBeMAwGA1UdEwEB/wQCMAAwDgYD
    VR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMDMBEGA1UdDgQKBAhE
    gFDdAjnAQTATBgNVHSMEDDAKgAhJgo9p9tHYWjAJBgcqhkjOPQQBAz8AMDwCHAcm
    uoSBiqJsdpPg2iCUiARR1yOrXDEf+FIKLwACHHz/QA1BOPOhJuLmcI3lbEjNHTND
    x0+Vo1q1QGg=
    -----END CERTIFICATE-----

    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHDJJk0eXeT+P7JMi7OE9FG+rpyIMSe5H7fhKdY2gBwYFK4EEACGhPAM6
    AASTO+tmtM71Oi9qS9aAlP+/65sUt8BBRfJ6k/U3ElNrjbWTklVb9od6Eot+qlvu
    BjjSP81SezY66w==
    -----END EC PRIVATE KEY-----

 */

extern const uint8_t sTestCert_FirmwareSigning_Weave[] =
{
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x2f, 0xdf, 0x91, 0xbb, 0x51, 0x88,
    0x38, 0x3a, 0x24, 0x02, 0x04, 0x37, 0x03, 0x27, 0x13, 0x04, 0x00, 0x00, 0xee, 0xee, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x16, 0xee, 0x6d, 0x1a, 0x26, 0x05, 0x16, 0x97, 0x93, 0x2d, 0x37, 0x06,
    0x27, 0x14, 0x01, 0x00, 0x00, 0x02, 0x03, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0x93, 0x3b, 0xeb, 0x66, 0xb4, 0xce, 0xf5, 0x3a,
    0x2f, 0x6a, 0x4b, 0xd6, 0x80, 0x94, 0xff, 0xbf, 0xeb, 0x9b, 0x14, 0xb7, 0xc0, 0x41, 0x45, 0xf2,
    0x7a, 0x93, 0xf5, 0x37, 0x12, 0x53, 0x6b, 0x8d, 0xb5, 0x93, 0x92, 0x55, 0x5b, 0xf6, 0x87, 0x7a,
    0x12, 0x8b, 0x7e, 0xaa, 0x5b, 0xee, 0x06, 0x38, 0xd2, 0x3f, 0xcd, 0x52, 0x7b, 0x36, 0x3a, 0xeb,
    0x35, 0x83, 0x29, 0x01, 0x18, 0x35, 0x82, 0x29, 0x01, 0x24, 0x02, 0x01, 0x18, 0x35, 0x84, 0x29,
    0x01, 0x36, 0x02, 0x04, 0x03, 0x18, 0x18, 0x35, 0x81, 0x30, 0x02, 0x08, 0x44, 0x80, 0x50, 0xdd,
    0x02, 0x39, 0xc0, 0x41, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x49, 0x82, 0x8f, 0x69, 0xf6, 0xd1,
    0xd8, 0x5a, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1c, 0x07, 0x26, 0xba, 0x84, 0x81, 0x8a, 0xa2, 0x6c,
    0x76, 0x93, 0xe0, 0xda, 0x20, 0x94, 0x88, 0x04, 0x51, 0xd7, 0x23, 0xab, 0x5c, 0x31, 0x1f, 0xf8,
    0x52, 0x0a, 0x2f, 0x00, 0x30, 0x02, 0x1c, 0x7c, 0xff, 0x40, 0x0d, 0x41, 0x38, 0xf3, 0xa1, 0x26,
    0xe2, 0xe6, 0x70, 0x8d, 0xe5, 0x6c, 0x48, 0xcd, 0x1d, 0x33, 0x43, 0xc7, 0x4f, 0x95, 0xa3, 0x5a,
    0xb5, 0x40, 0x68, 0x18, 0x18,
};

extern const size_t sTestCertLength_FirmwareSigning_Weave = sizeof(sTestCert_FirmwareSigning_Weave);

extern const uint8_t sTestCert_FirmwareSigning_DER[] =
{
    0x30, 0x82, 0x01, 0x84, 0x30, 0x82, 0x01, 0x34, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x2f,
    0xdf, 0x91, 0xbb, 0x51, 0x88, 0x38, 0x3a, 0x30, 0x09, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x01, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82,
    0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30, 0x45, 0x45, 0x45, 0x45,
    0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x31, 0x30, 0x31, 0x38,
    0x30, 0x31, 0x35, 0x39, 0x35, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x33, 0x31, 0x30, 0x31, 0x36, 0x30,
    0x31, 0x35, 0x39, 0x35, 0x30, 0x5a, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06,
    0x01, 0x04, 0x01, 0x82, 0xc3, 0x2b, 0x01, 0x04, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30,
    0x30, 0x33, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x4e, 0x30, 0x10, 0x06, 0x07,
    0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x21, 0x03, 0x3a,
    0x00, 0x04, 0x93, 0x3b, 0xeb, 0x66, 0xb4, 0xce, 0xf5, 0x3a, 0x2f, 0x6a, 0x4b, 0xd6, 0x80, 0x94,
    0xff, 0xbf, 0xeb, 0x9b, 0x14, 0xb7, 0xc0, 0x41, 0x45, 0xf2, 0x7a, 0x93, 0xf5, 0x37, 0x12, 0x53,
    0x6b, 0x8d, 0xb5, 0x93, 0x92, 0x55, 0x5b, 0xf6, 0x87, 0x7a, 0x12, 0x8b, 0x7e, 0xaa, 0x5b, 0xee,
    0x06, 0x38, 0xd2, 0x3f, 0xcd, 0x52, 0x7b, 0x36, 0x3a, 0xeb, 0xa3, 0x60, 0x30, 0x5e, 0x30, 0x0c,
    0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06, 0x03,
    0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06, 0x03,
    0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x0c, 0x30, 0x0a, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05,
    0x05, 0x07, 0x03, 0x03, 0x30, 0x11, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x0a, 0x04, 0x08, 0x44,
    0x80, 0x50, 0xdd, 0x02, 0x39, 0xc0, 0x41, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x0c,
    0x30, 0x0a, 0x80, 0x08, 0x49, 0x82, 0x8f, 0x69, 0xf6, 0xd1, 0xd8, 0x5a, 0x30, 0x09, 0x06, 0x07,
    0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x01, 0x03, 0x3f, 0x00, 0x30, 0x3c, 0x02, 0x1c, 0x07, 0x26,
    0xba, 0x84, 0x81, 0x8a, 0xa2, 0x6c, 0x76, 0x93, 0xe0, 0xda, 0x20, 0x94, 0x88, 0x04, 0x51, 0xd7,
    0x23, 0xab, 0x5c, 0x31, 0x1f, 0xf8, 0x52, 0x0a, 0x2f, 0x00, 0x02, 0x1c, 0x7c, 0xff, 0x40, 0x0d,
    0x41, 0x38, 0xf3, 0xa1, 0x26, 0xe2, 0xe6, 0x70, 0x8d, 0xe5, 0x6c, 0x48, 0xcd, 0x1d, 0x33, 0x43,
    0xc7, 0x4f, 0x95, 0xa3, 0x5a, 0xb5, 0x40, 0x68,
};

extern const size_t sTestCertLength_FirmwareSigning_DER = sizeof(sTestCert_FirmwareSigning_DER);



/*
    FirmwareSigning_SHA256 Certificate
        Data:
            Version: 3 (0x2)
            Serial Number: 142880620290085068 (0x1fb9d2ac9ad90cc)
        Signature Algorithm: ecdsa-with-SHA256
            Issuer: 1.3.6.1.4.1.41387.1.3=18B430EEEE000004
            Validity
                Not Before: Oct 18 00:00:00 2013 GMT
                Not After : Oct 17 23:59:59 2023 GMT
            Subject: 1.3.6.1.4.1.41387.1.4=18B4300302000001
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (224 bit)
                    pub:
                        04:93:3b:eb:66:b4:ce:f5:3a:2f:6a:4b:d6:80:94:
                        ff:bf:eb:9b:14:b7:c0:41:45:f2:7a:93:f5:37:12:
                        53:6b:8d:b5:93:92:55:5b:f6:87:7a:12:8b:7e:aa:
                        5b:ee:06:38:d2:3f:cd:52:7b:36:3a:eb
                    ASN1 OID: secp224r1
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:FALSE
                X509v3 Key Usage: critical
                    Digital Signature
                X509v3 Extended Key Usage: critical
                    Code Signing
                X509v3 Subject Key Identifier:
                    44:80:50:DD:02:39:C0:41
                X509v3 Authority Key Identifier:
                    keyid:49:82:8F:69:F6:D1:D8:5A

        Signature Algorithm: ecdsa-with-SHA256
             30:3d:02:1c:53:38:06:47:ee:f8:85:75:25:43:ab:ae:dd:6a:
             8d:7c:91:84:5e:18:f2:75:e0:18:92:a3:aa:c2:02:1d:00:ac:
             a2:10:64:32:6a:61:0e:b2:e5:a3:7e:6c:db:01:c6:1a:5b:ec:
             31:95:f4:65:20:2c:5e:d6:f3

    -----BEGIN CERTIFICATE-----
    MIIBhzCCATWgAwIBAgIIAfudKsmtkMwwCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMEVFRUUwMDAwMDQwHhcNMTMxMDE4MDAwMDAwWhcNMjMxMDE3
    MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBBAwQMThCNDMwMDMwMjAwMDAwMTBOMBAG
    ByqGSM49AgEGBSuBBAAhAzoABJM762a0zvU6L2pL1oCU/7/rmxS3wEFF8nqT9TcS
    U2uNtZOSVVv2h3oSi36qW+4GONI/zVJ7Njrro2AwXjAMBgNVHRMBAf8EAjAAMA4G
    A1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAzARBgNVHQ4ECgQI
    RIBQ3QI5wEEwEwYDVR0jBAwwCoAISYKPafbR2FowCgYIKoZIzj0EAwIDQAAwPQIc
    UzgGR+74hXUlQ6uu3WqNfJGEXhjydeAYkqOqwgIdAKyiEGQyamEOsuWjfmzbAcYa
    W+wxlfRlICxe1vM=
    -----END CERTIFICATE-----

    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHDJJk0eXeT+P7JMi7OE9FG+rpyIMSe5H7fhKdY2gBwYFK4EEACGhPAM6
    AASTO+tmtM71Oi9qS9aAlP+/65sUt8BBRfJ6k/U3ElNrjbWTklVb9od6Eot+qlvu
    BjjSP81SezY66w==
    -----END EC PRIVATE KEY-----
 */

extern const uint8_t sTestCert_FirmwareSigning_SHA256_Weave[] =
{
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x01, 0xfb, 0x9d, 0x2a, 0xc9, 0xad,
    0x90, 0xcc, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x04, 0x00, 0x00, 0xee, 0xee, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x00, 0xd2, 0x6d, 0x1a, 0x26, 0x05, 0xff, 0x1d, 0x96, 0x2d, 0x37, 0x06,
    0x27, 0x14, 0x01, 0x00, 0x00, 0x02, 0x03, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0x93, 0x3b, 0xeb, 0x66, 0xb4, 0xce, 0xf5, 0x3a,
    0x2f, 0x6a, 0x4b, 0xd6, 0x80, 0x94, 0xff, 0xbf, 0xeb, 0x9b, 0x14, 0xb7, 0xc0, 0x41, 0x45, 0xf2,
    0x7a, 0x93, 0xf5, 0x37, 0x12, 0x53, 0x6b, 0x8d, 0xb5, 0x93, 0x92, 0x55, 0x5b, 0xf6, 0x87, 0x7a,
    0x12, 0x8b, 0x7e, 0xaa, 0x5b, 0xee, 0x06, 0x38, 0xd2, 0x3f, 0xcd, 0x52, 0x7b, 0x36, 0x3a, 0xeb,
    0x35, 0x83, 0x29, 0x01, 0x18, 0x35, 0x82, 0x29, 0x01, 0x24, 0x02, 0x01, 0x18, 0x35, 0x84, 0x29,
    0x01, 0x36, 0x02, 0x04, 0x03, 0x18, 0x18, 0x35, 0x81, 0x30, 0x02, 0x08, 0x44, 0x80, 0x50, 0xdd,
    0x02, 0x39, 0xc0, 0x41, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x49, 0x82, 0x8f, 0x69, 0xf6, 0xd1,
    0xd8, 0x5a, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1c, 0x53, 0x38, 0x06, 0x47, 0xee, 0xf8, 0x85, 0x75,
    0x25, 0x43, 0xab, 0xae, 0xdd, 0x6a, 0x8d, 0x7c, 0x91, 0x84, 0x5e, 0x18, 0xf2, 0x75, 0xe0, 0x18,
    0x92, 0xa3, 0xaa, 0xc2, 0x30, 0x02, 0x1d, 0x00, 0xac, 0xa2, 0x10, 0x64, 0x32, 0x6a, 0x61, 0x0e,
    0xb2, 0xe5, 0xa3, 0x7e, 0x6c, 0xdb, 0x01, 0xc6, 0x1a, 0x5b, 0xec, 0x31, 0x95, 0xf4, 0x65, 0x20,
    0x2c, 0x5e, 0xd6, 0xf3, 0x18, 0x18,
};

extern const size_t sTestCertLength_FirmwareSigning_SHA256_Weave = sizeof(sTestCert_FirmwareSigning_SHA256_Weave);

extern const uint8_t sTestCert_FirmwareSigning_SHA256_DER[] =
{
    0x30, 0x82, 0x01, 0x87, 0x30, 0x82, 0x01, 0x35, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x08, 0x01,
    0xfb, 0x9d, 0x2a, 0xc9, 0xad, 0x90, 0xcc, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d,
    0x04, 0x03, 0x02, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b, 0x06, 0x01, 0x04, 0x01,
    0x82, 0xc3, 0x2b, 0x01, 0x03, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33, 0x30, 0x45, 0x45, 0x45,
    0x45, 0x30, 0x30, 0x30, 0x30, 0x30, 0x34, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x33, 0x31, 0x30, 0x31,
    0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x33, 0x31, 0x30, 0x31, 0x37,
    0x32, 0x33, 0x35, 0x39, 0x35, 0x39, 0x5a, 0x30, 0x22, 0x31, 0x20, 0x30, 0x1e, 0x06, 0x0a, 0x2b,
    0x06, 0x01, 0x04, 0x01, 0x82, 0xc3, 0x2b, 0x01, 0x04, 0x0c, 0x10, 0x31, 0x38, 0x42, 0x34, 0x33,
    0x30, 0x30, 0x33, 0x30, 0x32, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x30, 0x4e, 0x30, 0x10, 0x06,
    0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x05, 0x2b, 0x81, 0x04, 0x00, 0x21, 0x03,
    0x3a, 0x00, 0x04, 0x93, 0x3b, 0xeb, 0x66, 0xb4, 0xce, 0xf5, 0x3a, 0x2f, 0x6a, 0x4b, 0xd6, 0x80,
    0x94, 0xff, 0xbf, 0xeb, 0x9b, 0x14, 0xb7, 0xc0, 0x41, 0x45, 0xf2, 0x7a, 0x93, 0xf5, 0x37, 0x12,
    0x53, 0x6b, 0x8d, 0xb5, 0x93, 0x92, 0x55, 0x5b, 0xf6, 0x87, 0x7a, 0x12, 0x8b, 0x7e, 0xaa, 0x5b,
    0xee, 0x06, 0x38, 0xd2, 0x3f, 0xcd, 0x52, 0x7b, 0x36, 0x3a, 0xeb, 0xa3, 0x60, 0x30, 0x5e, 0x30,
    0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x02, 0x30, 0x00, 0x30, 0x0e, 0x06,
    0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04, 0x03, 0x02, 0x07, 0x80, 0x30, 0x16, 0x06,
    0x03, 0x55, 0x1d, 0x25, 0x01, 0x01, 0xff, 0x04, 0x0c, 0x30, 0x0a, 0x06, 0x08, 0x2b, 0x06, 0x01,
    0x05, 0x05, 0x07, 0x03, 0x03, 0x30, 0x11, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x0a, 0x04, 0x08,
    0x44, 0x80, 0x50, 0xdd, 0x02, 0x39, 0xc0, 0x41, 0x30, 0x13, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04,
    0x0c, 0x30, 0x0a, 0x80, 0x08, 0x49, 0x82, 0x8f, 0x69, 0xf6, 0xd1, 0xd8, 0x5a, 0x30, 0x0a, 0x06,
    0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x03, 0x40, 0x00, 0x30, 0x3d, 0x02, 0x1c,
    0x53, 0x38, 0x06, 0x47, 0xee, 0xf8, 0x85, 0x75, 0x25, 0x43, 0xab, 0xae, 0xdd, 0x6a, 0x8d, 0x7c,
    0x91, 0x84, 0x5e, 0x18, 0xf2, 0x75, 0xe0, 0x18, 0x92, 0xa3, 0xaa, 0xc2, 0x02, 0x1d, 0x00, 0xac,
    0xa2, 0x10, 0x64, 0x32, 0x6a, 0x61, 0x0e, 0xb2, 0xe5, 0xa3, 0x7e, 0x6c, 0xdb, 0x01, 0xc6, 0x1a,
    0x5b, 0xec, 0x31, 0x95, 0xf4, 0x65, 0x20, 0x2c, 0x5e, 0xd6, 0xf3,
};

extern const size_t sTestCertLength_FirmwareSigning_SHA256_DER = sizeof(sTestCert_FirmwareSigning_SHA256_DER);






} // namespace TestCerts
} // namespace nl
