/*
 *
 *    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 certificated 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_CurveOID, 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_CurveOID = 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);


/*
    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
