/*
 *
 *    Copyright (c) 2013-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
 *      Test weave certificates and private keys
 *
 */

#include "ToolCommon.h"

// Certificate and private key for Test Device 1
//

uint64_t TestDevice1_NodeId = 0x18B4300000000001ULL;

uint8_t TestDevice1_Cert[] =
{

    /*
    -----BEGIN CERTIFICATE-----
    MIIBhzCCAT6gAwIBAgIIEEjK8u1PmzAwCQYHKoZIzj0EATAiMSAwHgYKKwYBBAGC
    wysBAwwQMThCNDMwRUVFRTAwMDAwMjAeFw0xMzEwMjIwMDQ3MDBaFw0yMzEwMjAw
    MDQ3MDBaMCIxIDAeBgorBgEEAYLDKwEBDBAxOEI0MzAwMDAwMDAwMDAxME4wEAYH
    KoZIzj0CAQYFK4EEACEDOgAE72edUwyZ/51yQrH5tmAgjiWfNXLwo+eD5lYUk/lo
    RWWLJDFeh4xkNSWHGQOZzUWhJPp2CxKeOX6jajBoMAwGA1UdEwEB/wQCMAAwDgYD
    VR0PAQH/BAQDAgWgMCAGA1UdJQEB/wQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAR
    BgNVHQ4ECgQITv9HUeTGY5swEwYDVR0jBAwwCoAIRONAOKnUtacwCQYHKoZIzj0E
    AQM4ADA1Ahhdt1KwlRMRcfFbZAOAjBi+oSDxhrpFbBQCGQDFDc8mAoARjFE6vZWV
    dpR3yUb/7cCgPb0=
    -----END CERTIFICATE-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x10, 0x48, 0xca, 0xf2, 0xed, 0x4f,
    0x9b, 0x30, 0x24, 0x02, 0x04, 0x57, 0x03, 0x00, 0x27, 0x13, 0x02, 0x00, 0x00, 0xee, 0xee, 0x30,
    0xb4, 0x18, 0x18, 0x26, 0x04, 0x04, 0x23, 0x73, 0x1a, 0x26, 0x05, 0x04, 0xcc, 0x98, 0x2d, 0x57,
    0x06, 0x00, 0x27, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02,
    0x24, 0x08, 0x25, 0x30, 0x0a, 0x39, 0x04, 0xef, 0x67, 0x9d, 0x53, 0x0c, 0x99, 0xff, 0x9d, 0x72,
    0x42, 0xb1, 0xf9, 0xb6, 0x60, 0x20, 0x8e, 0x25, 0x9f, 0x35, 0x72, 0xf0, 0xa3, 0xe7, 0x83, 0xe6,
    0x56, 0x14, 0x93, 0xf9, 0x68, 0x45, 0x65, 0x8b, 0x24, 0x31, 0x5e, 0x87, 0x8c, 0x64, 0x35, 0x25,
    0x87, 0x19, 0x03, 0x99, 0xcd, 0x45, 0xa1, 0x24, 0xfa, 0x76, 0x0b, 0x12, 0x9e, 0x39, 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, 0x4e, 0xff, 0x47,
    0x51, 0xe4, 0xc6, 0x63, 0x9b, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x44, 0xe3, 0x40, 0x38, 0xa9,
    0xd4, 0xb5, 0xa7, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x18, 0x5d, 0xb7, 0x52, 0xb0, 0x95, 0x13, 0x11,
    0x71, 0xf1, 0x5b, 0x64, 0x03, 0x80, 0x8c, 0x18, 0xbe, 0xa1, 0x20, 0xf1, 0x86, 0xba, 0x45, 0x6c,
    0x14, 0x30, 0x02, 0x19, 0x00, 0xc5, 0x0d, 0xcf, 0x26, 0x02, 0x80, 0x11, 0x8c, 0x51, 0x3a, 0xbd,
    0x95, 0x95, 0x76, 0x94, 0x77, 0xc9, 0x46, 0xff, 0xed, 0xc0, 0xa0, 0x3d, 0xbd, 0x18, 0x18
};

uint16_t TestDevice1_CertLength = sizeof(TestDevice1_Cert);

uint8_t TestDevice1_PrivateKey[] =
{

    /*
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHKmH22bJe2mLomgimLLt70dguW98M6EsKajVuO6gBwYFK4EEACGhPAM6
    AATvZ51TDJn/nXJCsfm2YCCOJZ81cvCj54PmVhST+WhFZYskMV6HjGQ1JYcZA5nN
    RaEk+nYLEp45fg==
    -----END EC PRIVATE KEY-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x24, 0x01, 0x25, 0x30, 0x02, 0x1c, 0xa9, 0x87, 0xdb,
    0x66, 0xc9, 0x7b, 0x69, 0x8b, 0xa2, 0x68, 0x22, 0x98, 0xb2, 0xed, 0xef, 0x47, 0x60, 0xb9, 0x6f,
    0x7c, 0x33, 0xa1, 0x2c, 0x29, 0xa8, 0xd5, 0xb8, 0xee, 0x30, 0x03, 0x39, 0x04, 0xef, 0x67, 0x9d,
    0x53, 0x0c, 0x99, 0xff, 0x9d, 0x72, 0x42, 0xb1, 0xf9, 0xb6, 0x60, 0x20, 0x8e, 0x25, 0x9f, 0x35,
    0x72, 0xf0, 0xa3, 0xe7, 0x83, 0xe6, 0x56, 0x14, 0x93, 0xf9, 0x68, 0x45, 0x65, 0x8b, 0x24, 0x31,
    0x5e, 0x87, 0x8c, 0x64, 0x35, 0x25, 0x87, 0x19, 0x03, 0x99, 0xcd, 0x45, 0xa1, 0x24, 0xfa, 0x76,
    0x0b, 0x12, 0x9e, 0x39, 0x7e, 0x18
};

uint16_t TestDevice1_PrivateKeyLength = sizeof(TestDevice1_PrivateKey);


// Certificate and private key for Test Device 2
//

uint64_t TestDevice2_NodeId = 0x18B4300000000002ULL;

uint8_t TestDevice2_Cert[] =
{

    /*
    -----BEGIN CERTIFICATE-----
    MIIBiDCCAT6gAwIBAgIIPFTEnv7rh0wwCQYHKoZIzj0EATAiMSAwHgYKKwYBBAGC
    wysBAwwQMThCNDMwRUVFRTAwMDAwMjAeFw0xMzEwMjIwMDUwMTJaFw0yMzEwMjAw
    MDUwMTJaMCIxIDAeBgorBgEEAYLDKwEBDBAxOEI0MzAwMDAwMDAwMDAyME4wEAYH
    KoZIzj0CAQYFK4EEACEDOgAEsB7F17Jiyrxe1x8foLbzy3FgKoWViydIURUEow3D
    CI6q5jGbsGugF5WuSwzFkc+r3q5LXDh33bGjajBoMAwGA1UdEwEB/wQCMAAwDgYD
    VR0PAQH/BAQDAgWgMCAGA1UdJQEB/wQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAR
    BgNVHQ4ECgQIQUiUV0usIFswEwYDVR0jBAwwCoAIRONAOKnUtacwCQYHKoZIzj0E
    AQM5ADA2AhkAruDfkbDeZ+RfrLIaVNGrAFkhP3+hQaTdAhkAht6WT6mSTsRRV9N4
    FzXTUuNKw2GuxQVW
    -----END CERTIFICATE-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x3c, 0x54, 0xc4, 0x9e, 0xfe, 0xeb,
    0x87, 0x4c, 0x24, 0x02, 0x04, 0x57, 0x03, 0x00, 0x27, 0x13, 0x02, 0x00, 0x00, 0xee, 0xee, 0x30,
    0xb4, 0x18, 0x18, 0x26, 0x04, 0xc4, 0x23, 0x73, 0x1a, 0x26, 0x05, 0xc4, 0xcc, 0x98, 0x2d, 0x57,
    0x06, 0x00, 0x27, 0x11, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02,
    0x24, 0x08, 0x25, 0x30, 0x0a, 0x39, 0x04, 0xb0, 0x1e, 0xc5, 0xd7, 0xb2, 0x62, 0xca, 0xbc, 0x5e,
    0xd7, 0x1f, 0x1f, 0xa0, 0xb6, 0xf3, 0xcb, 0x71, 0x60, 0x2a, 0x85, 0x95, 0x8b, 0x27, 0x48, 0x51,
    0x15, 0x04, 0xa3, 0x0d, 0xc3, 0x08, 0x8e, 0xaa, 0xe6, 0x31, 0x9b, 0xb0, 0x6b, 0xa0, 0x17, 0x95,
    0xae, 0x4b, 0x0c, 0xc5, 0x91, 0xcf, 0xab, 0xde, 0xae, 0x4b, 0x5c, 0x38, 0x77, 0xdd, 0xb1, 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, 0x41, 0x48, 0x94,
    0x57, 0x4b, 0xac, 0x20, 0x5b, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x44, 0xe3, 0x40, 0x38, 0xa9,
    0xd4, 0xb5, 0xa7, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x19, 0x00, 0xae, 0xe0, 0xdf, 0x91, 0xb0, 0xde,
    0x67, 0xe4, 0x5f, 0xac, 0xb2, 0x1a, 0x54, 0xd1, 0xab, 0x00, 0x59, 0x21, 0x3f, 0x7f, 0xa1, 0x41,
    0xa4, 0xdd, 0x30, 0x02, 0x19, 0x00, 0x86, 0xde, 0x96, 0x4f, 0xa9, 0x92, 0x4e, 0xc4, 0x51, 0x57,
    0xd3, 0x78, 0x17, 0x35, 0xd3, 0x52, 0xe3, 0x4a, 0xc3, 0x61, 0xae, 0xc5, 0x05, 0x56, 0x18, 0x18
};

uint16_t TestDevice2_CertLength = sizeof(TestDevice2_Cert);

uint8_t TestDevice2_PrivateKey[] =
{

    /*
    -----BEGIN PRIVATE KEY-----
    MHgCAQAwEAYHKoZIzj0CAQYFK4EEACEEYTBfAgEBBByBDFNiy0wkB3RHmWaUrn/9
    hdUP5JrfLTndurQ3oTwDOgAEsB7F17Jiyrxe1x8foLbzy3FgKoWViydIURUEow3D
    CI6q5jGbsGugF5WuSwzFkc+r3q5LXDh33bE=
    -----END PRIVATE KEY-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x24, 0x01, 0x25, 0x30, 0x02, 0x1c, 0x81, 0x0c, 0x53,
    0x62, 0xcb, 0x4c, 0x24, 0x07, 0x74, 0x47, 0x99, 0x66, 0x94, 0xae, 0x7f, 0xfd, 0x85, 0xd5, 0x0f,
    0xe4, 0x9a, 0xdf, 0x2d, 0x39, 0xdd, 0xba, 0xb4, 0x37, 0x30, 0x03, 0x39, 0x04, 0xb0, 0x1e, 0xc5,
    0xd7, 0xb2, 0x62, 0xca, 0xbc, 0x5e, 0xd7, 0x1f, 0x1f, 0xa0, 0xb6, 0xf3, 0xcb, 0x71, 0x60, 0x2a,
    0x85, 0x95, 0x8b, 0x27, 0x48, 0x51, 0x15, 0x04, 0xa3, 0x0d, 0xc3, 0x08, 0x8e, 0xaa, 0xe6, 0x31,
    0x9b, 0xb0, 0x6b, 0xa0, 0x17, 0x95, 0xae, 0x4b, 0x0c, 0xc5, 0x91, 0xcf, 0xab, 0xde, 0xae, 0x4b,
    0x5c, 0x38, 0x77, 0xdd, 0xb1, 0x18
};

uint16_t TestDevice2_PrivateKeyLength = sizeof(TestDevice2_PrivateKey);


// Certificate and private key for Test Device 3
//

uint64_t TestDevice3_NodeId = 0x18B4300000000003ULL;

uint8_t TestDevice3_Cert[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x0E, 0x0E, 0x6B, 0x67, 0x78, 0x0D,
    0x08, 0x29, 0x24, 0x02, 0x04, 0x37, 0x03, 0x27, 0x13, 0x02, 0x00, 0x00, 0xEE, 0xEE, 0x30, 0xB4,
    0x18, 0x18, 0x26, 0x04, 0xB9, 0x2D, 0x12, 0x1D, 0x26, 0x05, 0x39, 0xCB, 0x3B, 0x30, 0x37, 0x06,
    0x27, 0x11, 0x03, 0x00, 0x00, 0x00, 0x00, 0x30, 0xB4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5A, 0x23, 0x30, 0x0A, 0x39, 0x04, 0x40, 0xC4, 0xF3, 0x78, 0x39, 0xBD, 0x9F, 0xC2,
    0x1D, 0x5F, 0x63, 0xD0, 0xD3, 0xC5, 0x20, 0xED, 0xD3, 0x65, 0x43, 0xED, 0xB6, 0x30, 0x0A, 0xDA,
    0x1B, 0xC4, 0xE7, 0x80, 0xDB, 0x45, 0xD7, 0x3C, 0xEB, 0xD2, 0xFB, 0xCE, 0x96, 0xA2, 0x07, 0x6C,
    0x07, 0xDE, 0xC9, 0xDD, 0x56, 0x3E, 0xC2, 0xA2, 0x54, 0xAA, 0xE4, 0xE2, 0x2B, 0xA5, 0x8F, 0x9A,
    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, 0x49, 0x89,
    0x4D, 0x8B, 0x7A, 0x99, 0x63, 0x77, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x44, 0xE3, 0x40, 0x38,
    0xA9, 0xD4, 0xB5, 0xA7, 0x18, 0x35, 0x0C, 0x30, 0x01, 0x19, 0x00, 0xFE, 0x32, 0x4E, 0x5E, 0x26,
    0x2F, 0xB0, 0x18, 0x0A, 0x90, 0xBB, 0x59, 0x4D, 0x9E, 0xC5, 0x8D, 0x0F, 0xF5, 0x01, 0x65, 0x86,
    0x16, 0xD6, 0x71, 0x30, 0x02, 0x18, 0x1B, 0xDA, 0xB8, 0x3B, 0x89, 0xA6, 0x63, 0xA7, 0x61, 0x65,
    0xF6, 0xF8, 0x80, 0x80, 0xA9, 0xC8, 0x8E, 0x81, 0x43, 0x08, 0xDA, 0xBB, 0x3A, 0x46, 0x18, 0x18,
};

uint16_t TestDevice3_CertLength = sizeof(TestDevice3_Cert);

uint8_t TestDevice3_PrivateKey[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5A, 0x23, 0x30, 0x02, 0x1C,
    0x2A, 0x9E, 0x10, 0x6F, 0x3A, 0x4A, 0xFB, 0x59, 0x59, 0xCE, 0x58, 0x77, 0x18, 0x0C, 0x44, 0x3B,
    0x0F, 0xAD, 0xA3, 0x45, 0x17, 0x4B, 0x55, 0x56, 0xC7, 0x1C, 0x5E, 0x62, 0x30, 0x03, 0x39, 0x04,
    0x40, 0xC4, 0xF3, 0x78, 0x39, 0xBD, 0x9F, 0xC2, 0x1D, 0x5F, 0x63, 0xD0, 0xD3, 0xC5, 0x20, 0xED,
    0xD3, 0x65, 0x43, 0xED, 0xB6, 0x30, 0x0A, 0xDA, 0x1B, 0xC4, 0xE7, 0x80, 0xDB, 0x45, 0xD7, 0x3C,
    0xEB, 0xD2, 0xFB, 0xCE, 0x96, 0xA2, 0x07, 0x6C, 0x07, 0xDE, 0xC9, 0xDD, 0x56, 0x3E, 0xC2, 0xA2,
    0x54, 0xAA, 0xE4, 0xE2, 0x2B, 0xA5, 0x8F, 0x9A, 0x18,
};

uint16_t TestDevice3_PrivateKeyLength = sizeof(TestDevice3_PrivateKey);


// Certificate and private key for Test Device 4
//

uint64_t TestDevice4_NodeId = 0x18B4300000000004ULL;

uint8_t TestDevice4_Cert[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x09, 0x1E, 0xBA, 0xAC, 0xB0, 0xF5,
    0x62, 0x81, 0x24, 0x02, 0x04, 0x37, 0x03, 0x27, 0x13, 0x02, 0x00, 0x00, 0xEE, 0xEE, 0x30, 0xB4,
    0x18, 0x18, 0x26, 0x04, 0xB9, 0x2D, 0x12, 0x1D, 0x26, 0x05, 0x39, 0xCB, 0x3B, 0x30, 0x37, 0x06,
    0x27, 0x11, 0x04, 0x00, 0x00, 0x00, 0x00, 0x30, 0xB4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5A, 0x23, 0x30, 0x0A, 0x39, 0x04, 0xE5, 0xCB, 0x25, 0xE1, 0x33, 0xF6, 0xA4, 0x2A,
    0xBD, 0x7D, 0x4E, 0x52, 0x25, 0xAB, 0x7E, 0x02, 0x17, 0x45, 0x6A, 0x66, 0x8F, 0x7A, 0x98, 0x8C,
    0x96, 0xF4, 0xAA, 0xAC, 0xEB, 0x9E, 0x2B, 0x33, 0x52, 0xCD, 0xB1, 0xC9, 0xBB, 0xA5, 0xA7, 0xC8,
    0xE2, 0x72, 0x95, 0x05, 0x07, 0x92, 0x6C, 0x19, 0x06, 0xF5, 0x7F, 0xD3, 0x8D, 0x09, 0x9C, 0xEE,
    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, 0x42, 0xA7,
    0x36, 0x47, 0xBA, 0x95, 0x4A, 0xA6, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x44, 0xE3, 0x40, 0x38,
    0xA9, 0xD4, 0xB5, 0xA7, 0x18, 0x35, 0x0C, 0x30, 0x01, 0x18, 0x77, 0x36, 0xE5, 0xCD, 0x8C, 0x6B,
    0xA1, 0x7E, 0x89, 0x1F, 0x67, 0x28, 0x51, 0xE6, 0x1B, 0x12, 0x0A, 0x27, 0x8D, 0x4B, 0x70, 0x78,
    0x70, 0x84, 0x30, 0x02, 0x19, 0x00, 0xA4, 0x45, 0x12, 0xC7, 0x32, 0x51, 0x49, 0x9A, 0xD6, 0x91,
    0x35, 0x06, 0x74, 0xC4, 0x54, 0x22, 0x9D, 0x2F, 0x59, 0x7C, 0x7A, 0xE7, 0xCE, 0x26, 0x18, 0x18,
};

uint16_t TestDevice4_CertLength = sizeof(TestDevice4_Cert);

uint8_t TestDevice4_PrivateKey[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5A, 0x23, 0x30, 0x02, 0x1C,
    0x44, 0xC4, 0x28, 0x10, 0xE9, 0xED, 0x3F, 0x25, 0xE0, 0xC3, 0xB6, 0x4B, 0x2A, 0x91, 0x87, 0x61,
    0xBB, 0x37, 0x8F, 0x96, 0x6B, 0x80, 0x49, 0xD0, 0x74, 0xF7, 0x3E, 0x5B, 0x30, 0x03, 0x39, 0x04,
    0xE5, 0xCB, 0x25, 0xE1, 0x33, 0xF6, 0xA4, 0x2A, 0xBD, 0x7D, 0x4E, 0x52, 0x25, 0xAB, 0x7E, 0x02,
    0x17, 0x45, 0x6A, 0x66, 0x8F, 0x7A, 0x98, 0x8C, 0x96, 0xF4, 0xAA, 0xAC, 0xEB, 0x9E, 0x2B, 0x33,
    0x52, 0xCD, 0xB1, 0xC9, 0xBB, 0xA5, 0xA7, 0xC8, 0xE2, 0x72, 0x95, 0x05, 0x07, 0x92, 0x6C, 0x19,
    0x06, 0xF5, 0x7F, 0xD3, 0x8D, 0x09, 0x9C, 0xEE, 0x18,
};

uint16_t TestDevice4_PrivateKeyLength = sizeof(TestDevice4_PrivateKey);


// Certificate and private key for Test Device 5
//

uint64_t TestDevice5_NodeId = 0x18B4300000000005ULL;

uint8_t TestDevice5_Cert[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x2B, 0x98, 0x4A, 0x46, 0x49, 0xEF,
    0x71, 0x5B, 0x24, 0x02, 0x04, 0x37, 0x03, 0x27, 0x13, 0x02, 0x00, 0x00, 0xEE, 0xEE, 0x30, 0xB4,
    0x18, 0x18, 0x26, 0x04, 0xB9, 0x2D, 0x12, 0x1D, 0x26, 0x05, 0x39, 0xCB, 0x3B, 0x30, 0x37, 0x06,
    0x27, 0x11, 0x05, 0x00, 0x00, 0x00, 0x00, 0x30, 0xB4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5A, 0x23, 0x30, 0x0A, 0x39, 0x04, 0xC3, 0xF7, 0x6C, 0x56, 0xEB, 0xEC, 0x71, 0x66,
    0x8D, 0x82, 0x54, 0x03, 0xFE, 0x28, 0xB2, 0x70, 0xDA, 0x80, 0x8A, 0x73, 0xC4, 0x18, 0x3D, 0x76,
    0x2C, 0x51, 0x4B, 0xBF, 0xE1, 0xF7, 0x80, 0xF9, 0xFB, 0xEE, 0x2C, 0x4F, 0xD1, 0xC6, 0xCC, 0x37,
    0xFF, 0x09, 0xBD, 0x12, 0xD4, 0x1D, 0xE9, 0x71, 0xFF, 0x54, 0xCB, 0xC1, 0xD0, 0xE4, 0x4F, 0x77,
    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, 0x41, 0x1A,
    0x66, 0x84, 0x71, 0x80, 0xD1, 0x58, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x44, 0xE3, 0x40, 0x38,
    0xA9, 0xD4, 0xB5, 0xA7, 0x18, 0x35, 0x0C, 0x30, 0x01, 0x18, 0x26, 0x56, 0x58, 0x8B, 0x30, 0xF2,
    0xD8, 0xE9, 0xDD, 0x11, 0xEC, 0xDD, 0x2E, 0x00, 0xD4, 0xED, 0xC5, 0x81, 0x05, 0x9A, 0x06, 0x52,
    0x89, 0x86, 0x30, 0x02, 0x18, 0x4C, 0x6B, 0x40, 0x65, 0x44, 0xE0, 0x07, 0x1E, 0xC5, 0x35, 0x68,
    0xFF, 0x2F, 0x9F, 0xE2, 0x23, 0x29, 0x68, 0x0B, 0xF8, 0xE5, 0x1D, 0x50, 0x5F, 0x18, 0x18,
};

uint16_t TestDevice5_CertLength = sizeof(TestDevice5_Cert);

uint8_t TestDevice5_PrivateKey[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5A, 0x23, 0x30, 0x02, 0x1C,
    0x98, 0xEB, 0xC4, 0x6D, 0x0A, 0xAD, 0x6E, 0xCC, 0x0C, 0x6A, 0xCB, 0x57, 0x96, 0x97, 0x3A, 0xE8,
    0x36, 0x64, 0x39, 0xF7, 0x08, 0x59, 0x62, 0xBB, 0xFB, 0x82, 0xA9, 0xE0, 0x30, 0x03, 0x39, 0x04,
    0xC3, 0xF7, 0x6C, 0x56, 0xEB, 0xEC, 0x71, 0x66, 0x8D, 0x82, 0x54, 0x03, 0xFE, 0x28, 0xB2, 0x70,
    0xDA, 0x80, 0x8A, 0x73, 0xC4, 0x18, 0x3D, 0x76, 0x2C, 0x51, 0x4B, 0xBF, 0xE1, 0xF7, 0x80, 0xF9,
    0xFB, 0xEE, 0x2C, 0x4F, 0xD1, 0xC6, 0xCC, 0x37, 0xFF, 0x09, 0xBD, 0x12, 0xD4, 0x1D, 0xE9, 0x71,
    0xFF, 0x54, 0xCB, 0xC1, 0xD0, 0xE4, 0x4F, 0x77, 0x18,
};

uint16_t TestDevice5_PrivateKeyLength = sizeof(TestDevice5_PrivateKey);


// Certificate and private key for Test Device 6
//

uint64_t TestDevice6_NodeId = 0x18B4300000000006ULL;

uint8_t TestDevice6_Cert[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x71, 0xCC, 0x48, 0x30, 0xB8, 0x6D,
    0x51, 0x5C, 0x24, 0x02, 0x04, 0x37, 0x03, 0x27, 0x13, 0x02, 0x00, 0x00, 0xEE, 0xEE, 0x30, 0xB4,
    0x18, 0x18, 0x26, 0x04, 0xB9, 0x2D, 0x12, 0x1D, 0x26, 0x05, 0x39, 0xCB, 0x3B, 0x30, 0x37, 0x06,
    0x27, 0x11, 0x06, 0x00, 0x00, 0x00, 0x00, 0x30, 0xB4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5A, 0x23, 0x30, 0x0A, 0x39, 0x04, 0x9B, 0xA4, 0xA1, 0x43, 0x82, 0x81, 0xCB, 0x33,
    0x4C, 0x67, 0x70, 0x39, 0xB1, 0x25, 0xE2, 0x27, 0xF1, 0x96, 0xB0, 0x27, 0xA9, 0x35, 0xFD, 0xFF,
    0x90, 0xAA, 0x3D, 0xC7, 0xE6, 0x4D, 0x9A, 0x28, 0xAF, 0x20, 0x19, 0x18, 0xA4, 0xCD, 0xED, 0x9E,
    0x07, 0xAB, 0x21, 0x46, 0xE2, 0x44, 0x28, 0x1D, 0x8B, 0xE8, 0x74, 0x40, 0x09, 0x40, 0xC8, 0x18,
    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, 0x44, 0x6F,
    0x6D, 0x7F, 0xD7, 0xC3, 0x4D, 0x47, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x44, 0xE3, 0x40, 0x38,
    0xA9, 0xD4, 0xB5, 0xA7, 0x18, 0x35, 0x0C, 0x30, 0x01, 0x19, 0x00, 0x89, 0xE2, 0x74, 0x27, 0x77,
    0x72, 0x11, 0x9C, 0x54, 0x6B, 0x75, 0xCD, 0xF4, 0xDF, 0xEE, 0xCD, 0x14, 0xC3, 0x94, 0x47, 0xF0,
    0xD1, 0xA4, 0x9E, 0x30, 0x02, 0x19, 0x00, 0x93, 0xB5, 0xFD, 0xC3, 0xE9, 0x53, 0xA3, 0x81, 0xAE,
    0x49, 0xE3, 0x43, 0x4D, 0x57, 0xB5, 0x6B, 0xB0, 0x21, 0x0B, 0x24, 0x7F, 0xAF, 0x2D, 0x02, 0x18,
    0x18,
};

uint16_t TestDevice6_CertLength = sizeof(TestDevice6_Cert);

uint8_t TestDevice6_PrivateKey[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5A, 0x23, 0x30, 0x02, 0x1C,
    0x07, 0x38, 0xBE, 0x9E, 0x25, 0xB1, 0x5A, 0xB0, 0xA6, 0x75, 0xE3, 0x90, 0xA8, 0x3E, 0x74, 0xEC,
    0xBB, 0x6D, 0x37, 0x5F, 0xAF, 0x69, 0x38, 0xE1, 0x06, 0x46, 0x71, 0x2A, 0x30, 0x03, 0x39, 0x04,
    0x9B, 0xA4, 0xA1, 0x43, 0x82, 0x81, 0xCB, 0x33, 0x4C, 0x67, 0x70, 0x39, 0xB1, 0x25, 0xE2, 0x27,
    0xF1, 0x96, 0xB0, 0x27, 0xA9, 0x35, 0xFD, 0xFF, 0x90, 0xAA, 0x3D, 0xC7, 0xE6, 0x4D, 0x9A, 0x28,
    0xAF, 0x20, 0x19, 0x18, 0xA4, 0xCD, 0xED, 0x9E, 0x07, 0xAB, 0x21, 0x46, 0xE2, 0x44, 0x28, 0x1D,
    0x8B, 0xE8, 0x74, 0x40, 0x09, 0x40, 0xC8, 0x18, 0x18,
};

uint16_t TestDevice6_PrivateKeyLength = sizeof(TestDevice6_PrivateKey);


// Certificate and private key for Test Device 7
//

uint64_t TestDevice7_NodeId = 0x18B4300000000007ULL;

uint8_t TestDevice7_Cert[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x4A, 0x18, 0x0A, 0x04, 0x41, 0x2A,
    0x54, 0x86, 0x24, 0x02, 0x04, 0x37, 0x03, 0x27, 0x13, 0x02, 0x00, 0x00, 0xEE, 0xEE, 0x30, 0xB4,
    0x18, 0x18, 0x26, 0x04, 0xB9, 0x2D, 0x12, 0x1D, 0x26, 0x05, 0x39, 0xCB, 0x3B, 0x30, 0x37, 0x06,
    0x27, 0x11, 0x07, 0x00, 0x00, 0x00, 0x00, 0x30, 0xB4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5A, 0x23, 0x30, 0x0A, 0x39, 0x04, 0xA5, 0xFC, 0x73, 0x38, 0x49, 0xCB, 0x15, 0x94,
    0x8F, 0xD6, 0xD0, 0x52, 0x76, 0x81, 0xBA, 0x14, 0xEC, 0x58, 0x6E, 0xFE, 0x49, 0x8F, 0x63, 0x9E,
    0x18, 0xB2, 0x9F, 0x85, 0xB8, 0x23, 0x48, 0x2A, 0x05, 0x08, 0x17, 0xED, 0x8D, 0x9C, 0xEB, 0x69,
    0x1B, 0xAC, 0xE1, 0x60, 0x67, 0x5E, 0xD9, 0x46, 0x36, 0xB8, 0x1C, 0x98, 0xC6, 0x5A, 0xE3, 0xEF,
    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, 0x4F, 0xD5,
    0x32, 0x9D, 0x8C, 0x4A, 0xB6, 0xDC, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x44, 0xE3, 0x40, 0x38,
    0xA9, 0xD4, 0xB5, 0xA7, 0x18, 0x35, 0x0C, 0x30, 0x01, 0x18, 0x49, 0x3C, 0x16, 0xD5, 0x8F, 0xEE,
    0x63, 0x19, 0xA0, 0x06, 0xCD, 0xAE, 0x66, 0x51, 0xC6, 0xDD, 0xD7, 0x91, 0x3D, 0x47, 0x7D, 0xEF,
    0x3A, 0x40, 0x30, 0x02, 0x19, 0x00, 0xD4, 0xFE, 0x26, 0xA8, 0xDB, 0x68, 0x8D, 0x57, 0x1C, 0xC9,
    0xA3, 0x33, 0x23, 0xDD, 0x65, 0xE7, 0x92, 0xCA, 0xC2, 0x48, 0x77, 0xEA, 0xFD, 0x31, 0x18, 0x18,
};

uint16_t TestDevice7_CertLength = sizeof(TestDevice7_Cert);

uint8_t TestDevice7_PrivateKey[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5A, 0x23, 0x30, 0x02, 0x1C,
    0xF9, 0xA2, 0x7E, 0x72, 0xFA, 0x71, 0x6D, 0xF4, 0x67, 0xC1, 0x42, 0x9D, 0xBD, 0x42, 0x4B, 0xE3,
    0xDC, 0x95, 0x98, 0x9E, 0xAE, 0xAC, 0x9B, 0x6A, 0xAD, 0x2C, 0x5B, 0x41, 0x30, 0x03, 0x39, 0x04,
    0xA5, 0xFC, 0x73, 0x38, 0x49, 0xCB, 0x15, 0x94, 0x8F, 0xD6, 0xD0, 0x52, 0x76, 0x81, 0xBA, 0x14,
    0xEC, 0x58, 0x6E, 0xFE, 0x49, 0x8F, 0x63, 0x9E, 0x18, 0xB2, 0x9F, 0x85, 0xB8, 0x23, 0x48, 0x2A,
    0x05, 0x08, 0x17, 0xED, 0x8D, 0x9C, 0xEB, 0x69, 0x1B, 0xAC, 0xE1, 0x60, 0x67, 0x5E, 0xD9, 0x46,
    0x36, 0xB8, 0x1C, 0x98, 0xC6, 0x5A, 0xE3, 0xEF, 0x18,
};

uint16_t TestDevice7_PrivateKeyLength = sizeof(TestDevice7_PrivateKey);


// Certificate and private key for Test Device 8
//

uint64_t TestDevice8_NodeId = 0x18B4300000000008ULL;

uint8_t TestDevice8_Cert[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x7C, 0xA7, 0x23, 0x41, 0x4B, 0x76,
    0x6D, 0xA5, 0x24, 0x02, 0x04, 0x37, 0x03, 0x27, 0x13, 0x02, 0x00, 0x00, 0xEE, 0xEE, 0x30, 0xB4,
    0x18, 0x18, 0x26, 0x04, 0xB9, 0x2D, 0x12, 0x1D, 0x26, 0x05, 0x39, 0xCB, 0x3B, 0x30, 0x37, 0x06,
    0x27, 0x11, 0x08, 0x00, 0x00, 0x00, 0x00, 0x30, 0xB4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5A, 0x23, 0x30, 0x0A, 0x39, 0x04, 0xA2, 0x0C, 0xC8, 0x43, 0xAD, 0x15, 0x63, 0x09,
    0x62, 0x26, 0xBB, 0x3B, 0x6A, 0x92, 0x55, 0x2F, 0xE6, 0x9B, 0x9A, 0xC8, 0x31, 0xBF, 0x5B, 0x11,
    0xAA, 0xCF, 0x89, 0xA0, 0xF8, 0x32, 0xC8, 0xFF, 0x3E, 0xD3, 0xD1, 0xE5, 0x3F, 0x90, 0x47, 0xE2,
    0x20, 0xB9, 0x26, 0x1A, 0xE1, 0xD0, 0x50, 0x02, 0x77, 0xEC, 0x5F, 0x2C, 0x49, 0x23, 0x79, 0x73,
    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, 0x4F, 0x34,
    0x3A, 0x5B, 0xC0, 0x17, 0xF4, 0x8C, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x44, 0xE3, 0x40, 0x38,
    0xA9, 0xD4, 0xB5, 0xA7, 0x18, 0x35, 0x0C, 0x30, 0x01, 0x18, 0x0D, 0xE0, 0x14, 0x42, 0x33, 0xE0,
    0x5F, 0x3D, 0xE3, 0x3E, 0xDB, 0xE2, 0x62, 0x5D, 0x97, 0xEF, 0x31, 0x66, 0xEE, 0x07, 0x2D, 0x49,
    0x24, 0x6F, 0x30, 0x02, 0x19, 0x00, 0xCF, 0x4A, 0x36, 0xDB, 0xB1, 0x81, 0xB0, 0xE0, 0xFE, 0x7E,
    0xEB, 0x27, 0xF9, 0xE5, 0xEA, 0x42, 0x8F, 0xE6, 0x89, 0xBE, 0x17, 0xE0, 0x6D, 0x55, 0x18, 0x18,
};

uint16_t TestDevice8_CertLength = sizeof(TestDevice8_Cert);

uint8_t TestDevice8_PrivateKey[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5A, 0x23, 0x30, 0x02, 0x1C,
    0xA8, 0x54, 0xA2, 0x77, 0x93, 0xAF, 0x34, 0x20, 0xC4, 0xBE, 0x81, 0x76, 0x4C, 0xD2, 0x68, 0x46,
    0xD8, 0x9E, 0xA9, 0xE3, 0xFC, 0x8A, 0x89, 0xD7, 0x8A, 0xD8, 0x1E, 0xC9, 0x30, 0x03, 0x39, 0x04,
    0xA2, 0x0C, 0xC8, 0x43, 0xAD, 0x15, 0x63, 0x09, 0x62, 0x26, 0xBB, 0x3B, 0x6A, 0x92, 0x55, 0x2F,
    0xE6, 0x9B, 0x9A, 0xC8, 0x31, 0xBF, 0x5B, 0x11, 0xAA, 0xCF, 0x89, 0xA0, 0xF8, 0x32, 0xC8, 0xFF,
    0x3E, 0xD3, 0xD1, 0xE5, 0x3F, 0x90, 0x47, 0xE2, 0x20, 0xB9, 0x26, 0x1A, 0xE1, 0xD0, 0x50, 0x02,
    0x77, 0xEC, 0x5F, 0x2C, 0x49, 0x23, 0x79, 0x73, 0x18,
};

uint16_t TestDevice8_PrivateKeyLength = sizeof(TestDevice8_PrivateKey);


// Certificate and private key for Test Device 9
//

uint64_t TestDevice9_NodeId = 0x18B4300000000009ULL;

uint8_t TestDevice9_Cert[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x40, 0xF9, 0x6B, 0xB4, 0x70, 0x55,
    0x6C, 0x49, 0x24, 0x02, 0x04, 0x37, 0x03, 0x27, 0x13, 0x02, 0x00, 0x00, 0xEE, 0xEE, 0x30, 0xB4,
    0x18, 0x18, 0x26, 0x04, 0xB9, 0x2D, 0x12, 0x1D, 0x26, 0x05, 0x39, 0xCB, 0x3B, 0x30, 0x37, 0x06,
    0x27, 0x11, 0x09, 0x00, 0x00, 0x00, 0x00, 0x30, 0xB4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5A, 0x23, 0x30, 0x0A, 0x39, 0x04, 0x19, 0x17, 0x1E, 0x9C, 0xB6, 0xA4, 0x3A, 0x45,
    0xB0, 0x67, 0x9A, 0x9C, 0x79, 0x39, 0xE0, 0x86, 0x86, 0xAC, 0xAB, 0x9E, 0x19, 0xD0, 0x37, 0x06,
    0xF7, 0xC4, 0xD2, 0x92, 0x5B, 0xE3, 0x73, 0x44, 0x2F, 0x90, 0x68, 0x93, 0x04, 0x0A, 0x00, 0xF5,
    0xCF, 0x0E, 0x5E, 0xEE, 0xA7, 0x04, 0x83, 0xF2, 0x05, 0x51, 0xB8, 0x31, 0x3D, 0x5B, 0x55, 0xB6,
    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, 0x43, 0xA5,
    0x5F, 0x97, 0x27, 0xD8, 0x77, 0x26, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x44, 0xE3, 0x40, 0x38,
    0xA9, 0xD4, 0xB5, 0xA7, 0x18, 0x35, 0x0C, 0x30, 0x01, 0x19, 0x00, 0xE5, 0x38, 0x88, 0x3A, 0x90,
    0x8C, 0x1F, 0x64, 0xA1, 0xEB, 0x20, 0xA2, 0x30, 0xD2, 0x41, 0x59, 0x3A, 0x01, 0xD7, 0x78, 0x7B,
    0x7A, 0x88, 0xCC, 0x30, 0x02, 0x19, 0x00, 0x93, 0xCA, 0x28, 0x4C, 0xA5, 0xD1, 0x6C, 0xE8, 0x0B,
    0x47, 0x8A, 0x70, 0x9C, 0xBE, 0x8A, 0x82, 0xF1, 0xA5, 0x7D, 0xE8, 0x29, 0xB8, 0xB7, 0x7A, 0x18,
    0x18,
};

uint16_t TestDevice9_CertLength = sizeof(TestDevice9_Cert);

uint8_t TestDevice9_PrivateKey[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5A, 0x23, 0x30, 0x02, 0x1C,
    0x5C, 0xD8, 0xF0, 0x9E, 0x52, 0xCC, 0x86, 0xD2, 0xF6, 0xC1, 0x48, 0x13, 0x42, 0xB4, 0x92, 0x49,
    0xB8, 0x1E, 0x2F, 0x16, 0x68, 0x42, 0x2B, 0x64, 0xC8, 0xFB, 0xB4, 0x15, 0x30, 0x03, 0x39, 0x04,
    0x19, 0x17, 0x1E, 0x9C, 0xB6, 0xA4, 0x3A, 0x45, 0xB0, 0x67, 0x9A, 0x9C, 0x79, 0x39, 0xE0, 0x86,
    0x86, 0xAC, 0xAB, 0x9E, 0x19, 0xD0, 0x37, 0x06, 0xF7, 0xC4, 0xD2, 0x92, 0x5B, 0xE3, 0x73, 0x44,
    0x2F, 0x90, 0x68, 0x93, 0x04, 0x0A, 0x00, 0xF5, 0xCF, 0x0E, 0x5E, 0xEE, 0xA7, 0x04, 0x83, 0xF2,
    0x05, 0x51, 0xB8, 0x31, 0x3D, 0x5B, 0x55, 0xB6, 0x18,
};

uint16_t TestDevice9_PrivateKeyLength = sizeof(TestDevice9_PrivateKey);


// Certificate and private key for Test Device 10
//

uint64_t TestDevice10_NodeId = 0x18B430000000000AULL;

uint8_t TestDevice10_Cert[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x56, 0xC9, 0x85, 0x76, 0xE3, 0x0F,
    0xA4, 0xB0, 0x24, 0x02, 0x04, 0x37, 0x03, 0x27, 0x13, 0x02, 0x00, 0x00, 0xEE, 0xEE, 0x30, 0xB4,
    0x18, 0x18, 0x26, 0x04, 0xB9, 0x2D, 0x12, 0x1D, 0x26, 0x05, 0x39, 0xCB, 0x3B, 0x30, 0x37, 0x06,
    0x27, 0x11, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x30, 0xB4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5A, 0x23, 0x30, 0x0A, 0x39, 0x04, 0x62, 0xBB, 0xB5, 0xA3, 0x8D, 0x22, 0x89, 0x14,
    0x07, 0x64, 0x71, 0xE4, 0xE5, 0x85, 0x99, 0x5F, 0x28, 0x9C, 0x6F, 0xA1, 0xB7, 0x34, 0x7C, 0x7B,
    0x94, 0x60, 0x41, 0x81, 0x49, 0x9E, 0x1C, 0xB4, 0x8E, 0x16, 0x57, 0xF4, 0xD4, 0x6D, 0x0F, 0xA4,
    0xB0, 0x45, 0x07, 0xD0, 0xEE, 0x4D, 0x01, 0x8D, 0xC9, 0xF0, 0x39, 0x66, 0x52, 0x93, 0x65, 0xBC,
    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, 0x45, 0xAF,
    0xE2, 0x6F, 0x99, 0xD7, 0x42, 0x70, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x44, 0xE3, 0x40, 0x38,
    0xA9, 0xD4, 0xB5, 0xA7, 0x18, 0x35, 0x0C, 0x30, 0x01, 0x19, 0x00, 0xA5, 0x9E, 0xCC, 0x64, 0xE8,
    0x6F, 0x1E, 0x93, 0x14, 0x02, 0xE0, 0x39, 0x77, 0xDD, 0x35, 0xE6, 0xF7, 0x3B, 0x7E, 0xCC, 0x4A,
    0x58, 0x78, 0x71, 0x30, 0x02, 0x19, 0x00, 0xAB, 0xF5, 0x73, 0x8F, 0x5B, 0x01, 0x8C, 0x8F, 0xAC,
    0x72, 0x75, 0xEA, 0xBF, 0xE2, 0xFA, 0xC6, 0x03, 0x5E, 0x1E, 0xD0, 0xF0, 0x15, 0x7B, 0x0D, 0x18,
    0x18,
};

uint16_t TestDevice10_CertLength = sizeof(TestDevice10_Cert);

uint8_t TestDevice10_PrivateKey[] =
{
    0xD5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5A, 0x23, 0x30, 0x02, 0x1C,
    0xD7, 0xD6, 0x6C, 0x2E, 0x67, 0xD9, 0x8F, 0x29, 0x36, 0x0F, 0x0A, 0x1E, 0x58, 0xCA, 0x85, 0x02,
    0x3D, 0x85, 0x22, 0x0C, 0x34, 0x8E, 0x1F, 0x7D, 0xC2, 0x84, 0xD5, 0xFE, 0x30, 0x03, 0x39, 0x04,
    0x62, 0xBB, 0xB5, 0xA3, 0x8D, 0x22, 0x89, 0x14, 0x07, 0x64, 0x71, 0xE4, 0xE5, 0x85, 0x99, 0x5F,
    0x28, 0x9C, 0x6F, 0xA1, 0xB7, 0x34, 0x7C, 0x7B, 0x94, 0x60, 0x41, 0x81, 0x49, 0x9E, 0x1C, 0xB4,
    0x8E, 0x16, 0x57, 0xF4, 0xD4, 0x6D, 0x0F, 0xA4, 0xB0, 0x45, 0x07, 0xD0, 0xEE, 0x4D, 0x01, 0x8D,
    0xC9, 0xF0, 0x39, 0x66, 0x52, 0x93, 0x65, 0xBC, 0x18,
};

uint16_t TestDevice10_PrivateKeyLength = sizeof(TestDevice10_PrivateKey);


// Certificate and private key for Directory Endpoint
//

uint64_t TestDirectoryEndpoint_NodeId = 0x18B4300200000001ULL;

uint8_t TestDirectoryEndpoint_Cert[] =
{
    /*
    -----BEGIN CERTIFICATE-----
    MIIBkDCCAT+gAwIBAgIIX9Rn5VEMoDMwCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMDEyMDAwMDAwMDMwHhcNMTcwNjEyMDAwMDAwWhcNMjcwNjEz
    MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBAgwQMThCNDMwMDIwMDAwMDAwMTBOMBAG
    ByqGSM49AgEGBSuBBAAhAzoABEAZLjXtJr0bR1WAx1NDL8zstYAVkkorgsUodW7C
    ow/RrQoiMPhOAimd3sgZwuJsbBeTO50rvx7Jo2owaDAMBgNVHRMBAf8EAjAAMA4G
    A1UdDwEB/wQEAwIFoDAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
    EQYDVR0OBAoECEd9i9Q35tazMBMGA1UdIwQMMAqACEe0q/SlstA9MAoGCCqGSM49
    BAMCAz8AMDwCHBvpcEvbf5uyNye/ead234qiBttK7s9y/R8A3IkCHF5ZyNz8EBK4
    7rX2MEzlNCsHRYC8xOhCouHy4Ts=
    -----END CERTIFICATE-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x5f, 0xd4, 0x67, 0xe5, 0x51, 0x0c,
    0xa0, 0x33, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x03, 0x00, 0x00, 0x00, 0x12, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x00, 0x27, 0x6c, 0x21, 0x26, 0x05, 0xff, 0x15, 0x97, 0x34, 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, 0x40, 0x19, 0x2e, 0x35, 0xed, 0x26, 0xbd, 0x1b,
    0x47, 0x55, 0x80, 0xc7, 0x53, 0x43, 0x2f, 0xcc, 0xec, 0xb5, 0x80, 0x15, 0x92, 0x4a, 0x2b, 0x82,
    0xc5, 0x28, 0x75, 0x6e, 0xc2, 0xa3, 0x0f, 0xd1, 0xad, 0x0a, 0x22, 0x30, 0xf8, 0x4e, 0x02, 0x29,
    0x9d, 0xde, 0xc8, 0x19, 0xc2, 0xe2, 0x6c, 0x6c, 0x17, 0x93, 0x3b, 0x9d, 0x2b, 0xbf, 0x1e, 0xc9,
    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, 0x47, 0x7d,
    0x8b, 0xd4, 0x37, 0xe6, 0xd6, 0xb3, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x47, 0xb4, 0xab, 0xf4,
    0xa5, 0xb2, 0xd0, 0x3d, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1c, 0x1b, 0xe9, 0x70, 0x4b, 0xdb, 0x7f,
    0x9b, 0xb2, 0x37, 0x27, 0xbf, 0x79, 0xa7, 0x76, 0xdf, 0x8a, 0xa2, 0x06, 0xdb, 0x4a, 0xee, 0xcf,
    0x72, 0xfd, 0x1f, 0x00, 0xdc, 0x89, 0x30, 0x02, 0x1c, 0x5e, 0x59, 0xc8, 0xdc, 0xfc, 0x10, 0x12,
    0xb8, 0xee, 0xb5, 0xf6, 0x30, 0x4c, 0xe5, 0x34, 0x2b, 0x07, 0x45, 0x80, 0xbc, 0xc4, 0xe8, 0x42,
    0xa2, 0xe1, 0xf2, 0xe1, 0x3b, 0x18, 0x18,
};

uint16_t TestDirectoryEndpoint_CertLength = sizeof(TestDirectoryEndpoint_Cert);

uint8_t TestDirectoryEndpoint_PrivateKey[] =
{
    /*
    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHOxQWSpbJr/XQ9601elWh6Zm0VSU2lWWGa6UDSygBwYFK4EEACGhPAM6
    AARAGS417Sa9G0dVgMdTQy/M7LWAFZJKK4LFKHVuwqMP0a0KIjD4TgIpnd7IGcLi
    bGwXkzudK78eyQ==
    -----END EC PRIVATE KEY-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5a, 0x23, 0x30, 0x02, 0x1c,
    0xec, 0x50, 0x59, 0x2a, 0x5b, 0x26, 0xbf, 0xd7, 0x43, 0xde, 0xb4, 0xd5, 0xe9, 0x56, 0x87, 0xa6,
    0x66, 0xd1, 0x54, 0x94, 0xda, 0x55, 0x96, 0x19, 0xae, 0x94, 0x0d, 0x2c, 0x30, 0x03, 0x39, 0x04,
    0x40, 0x19, 0x2e, 0x35, 0xed, 0x26, 0xbd, 0x1b, 0x47, 0x55, 0x80, 0xc7, 0x53, 0x43, 0x2f, 0xcc,
    0xec, 0xb5, 0x80, 0x15, 0x92, 0x4a, 0x2b, 0x82, 0xc5, 0x28, 0x75, 0x6e, 0xc2, 0xa3, 0x0f, 0xd1,
    0xad, 0x0a, 0x22, 0x30, 0xf8, 0x4e, 0x02, 0x29, 0x9d, 0xde, 0xc8, 0x19, 0xc2, 0xe2, 0x6c, 0x6c,
    0x17, 0x93, 0x3b, 0x9d, 0x2b, 0xbf, 0x1e, 0xc9, 0x18,
};

uint16_t TestDirectoryEndpoint_PrivateKeyLength = sizeof(TestDirectoryEndpoint_PrivateKey);


// Certificate and private key for SoftwareUpdate Endpoint
//

uint64_t TestSoftwareUpdateEndpoint_NodeId = 0x18B4300200000002ULL;

uint8_t TestSoftwareUpdateEndpoint_Cert[] =
{
    /*
    -----BEGIN CERTIFICATE-----
    MIIBkDCCAT+gAwIBAgIIALkdahMSPiQwCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMDEyMDAwMDAwMDMwHhcNMTcwNjEyMDAwMDAwWhcNMjcwNjEz
    MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBAgwQMThCNDMwMDIwMDAwMDAwMjBOMBAG
    ByqGSM49AgEGBSuBBAAhAzoABESYpkHt2zgwn72PFVD0wsOyhfmafalb3v/hI3th
    swyAjeSsaxEk9sFdftfOKHjmR8I8V5VRsteVo2owaDAMBgNVHRMBAf8EAjAAMA4G
    A1UdDwEB/wQEAwIFoDAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
    EQYDVR0OBAoECExH0hssgQ+oMBMGA1UdIwQMMAqACEe0q/SlstA9MAoGCCqGSM49
    BAMCAz8AMDwCHDN55x48CkeGxYtNyZDE8c/2SDfL/xuBRe+ZYawCHE11b6rVbDet
    5BrgJGi3C9os+5UQLGOAm6EjYFs=
    -----END CERTIFICATE-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x00, 0xb9, 0x1d, 0x6a, 0x13, 0x12,
    0x3e, 0x24, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x03, 0x00, 0x00, 0x00, 0x12, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x00, 0x27, 0x6c, 0x21, 0x26, 0x05, 0xff, 0x15, 0x97, 0x34, 0x37, 0x06,
    0x27, 0x12, 0x02, 0x00, 0x00, 0x00, 0x02, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0x44, 0x98, 0xa6, 0x41, 0xed, 0xdb, 0x38, 0x30,
    0x9f, 0xbd, 0x8f, 0x15, 0x50, 0xf4, 0xc2, 0xc3, 0xb2, 0x85, 0xf9, 0x9a, 0x7d, 0xa9, 0x5b, 0xde,
    0xff, 0xe1, 0x23, 0x7b, 0x61, 0xb3, 0x0c, 0x80, 0x8d, 0xe4, 0xac, 0x6b, 0x11, 0x24, 0xf6, 0xc1,
    0x5d, 0x7e, 0xd7, 0xce, 0x28, 0x78, 0xe6, 0x47, 0xc2, 0x3c, 0x57, 0x95, 0x51, 0xb2, 0xd7, 0x95,
    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, 0x4c, 0x47,
    0xd2, 0x1b, 0x2c, 0x81, 0x0f, 0xa8, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x47, 0xb4, 0xab, 0xf4,
    0xa5, 0xb2, 0xd0, 0x3d, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1c, 0x33, 0x79, 0xe7, 0x1e, 0x3c, 0x0a,
    0x47, 0x86, 0xc5, 0x8b, 0x4d, 0xc9, 0x90, 0xc4, 0xf1, 0xcf, 0xf6, 0x48, 0x37, 0xcb, 0xff, 0x1b,
    0x81, 0x45, 0xef, 0x99, 0x61, 0xac, 0x30, 0x02, 0x1c, 0x4d, 0x75, 0x6f, 0xaa, 0xd5, 0x6c, 0x37,
    0xad, 0xe4, 0x1a, 0xe0, 0x24, 0x68, 0xb7, 0x0b, 0xda, 0x2c, 0xfb, 0x95, 0x10, 0x2c, 0x63, 0x80,
    0x9b, 0xa1, 0x23, 0x60, 0x5b, 0x18, 0x18,
};

uint16_t TestSoftwareUpdateEndpoint_CertLength = sizeof(TestSoftwareUpdateEndpoint_Cert);

uint8_t TestSoftwareUpdateEndpoint_PrivateKey[] =
{
    /*
    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHDgBQZmM/K6v4P2ayF3+SsyB/HEYia0VUFB5PUOgBwYFK4EEACGhPAM6
    AAREmKZB7ds4MJ+9jxVQ9MLDsoX5mn2pW97/4SN7YbMMgI3krGsRJPbBXX7Xzih4
    5kfCPFeVUbLXlQ==
    -----END EC PRIVATE KEY-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5a, 0x23, 0x30, 0x02, 0x1c,
    0x38, 0x01, 0x41, 0x99, 0x8c, 0xfc, 0xae, 0xaf, 0xe0, 0xfd, 0x9a, 0xc8, 0x5d, 0xfe, 0x4a, 0xcc,
    0x81, 0xfc, 0x71, 0x18, 0x89, 0xad, 0x15, 0x50, 0x50, 0x79, 0x3d, 0x43, 0x30, 0x03, 0x39, 0x04,
    0x44, 0x98, 0xa6, 0x41, 0xed, 0xdb, 0x38, 0x30, 0x9f, 0xbd, 0x8f, 0x15, 0x50, 0xf4, 0xc2, 0xc3,
    0xb2, 0x85, 0xf9, 0x9a, 0x7d, 0xa9, 0x5b, 0xde, 0xff, 0xe1, 0x23, 0x7b, 0x61, 0xb3, 0x0c, 0x80,
    0x8d, 0xe4, 0xac, 0x6b, 0x11, 0x24, 0xf6, 0xc1, 0x5d, 0x7e, 0xd7, 0xce, 0x28, 0x78, 0xe6, 0x47,
    0xc2, 0x3c, 0x57, 0x95, 0x51, 0xb2, 0xd7, 0x95, 0x18,
};

uint16_t TestSoftwareUpdateEndpoint_PrivateKeyLength = sizeof(TestSoftwareUpdateEndpoint_PrivateKey);


// Certificate and private key for DataManagement Endpoint
//

uint64_t TestDataManagementEndpoint_NodeId = 0x18B4300200000003ULL;

uint8_t TestDataManagementEndpoint_Cert[] =
{
    /*
    -----BEGIN CERTIFICATE-----
    MIIBkTCCAT+gAwIBAgIIE8D+J0he20owCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMDEyMDAwMDAwMDMwHhcNMTcwNjEyMDAwMDAwWhcNMjcwNjEz
    MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBAgwQMThCNDMwMDIwMDAwMDAwMzBOMBAG
    ByqGSM49AgEGBSuBBAAhAzoABNKtOPo7alj2B/gFo6+7WMNPeVa1pfagpzwsXJ2o
    5OuS6X6oMX1xeLE17uhg7NGZXxt3GPbVgrz4o2owaDAMBgNVHRMBAf8EAjAAMA4G
    A1UdDwEB/wQEAwIFoDAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
    EQYDVR0OBAoECEadlDrd8HvVMBMGA1UdIwQMMAqACEe0q/SlstA9MAoGCCqGSM49
    BAMCA0AAMD0CHENPxm5feyBrgaQWjhWiUvJB4jMmXT2Ys8Y2h5ECHQC9iywc2v/N
    q8g16paBF6SVlR0s0keZ9kSP72vI
    -----END CERTIFICATE-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x13, 0xc0, 0xfe, 0x27, 0x48, 0x5e,
    0xdb, 0x4a, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x03, 0x00, 0x00, 0x00, 0x12, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x00, 0x27, 0x6c, 0x21, 0x26, 0x05, 0xff, 0x15, 0x97, 0x34, 0x37, 0x06,
    0x27, 0x12, 0x03, 0x00, 0x00, 0x00, 0x02, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0xd2, 0xad, 0x38, 0xfa, 0x3b, 0x6a, 0x58, 0xf6,
    0x07, 0xf8, 0x05, 0xa3, 0xaf, 0xbb, 0x58, 0xc3, 0x4f, 0x79, 0x56, 0xb5, 0xa5, 0xf6, 0xa0, 0xa7,
    0x3c, 0x2c, 0x5c, 0x9d, 0xa8, 0xe4, 0xeb, 0x92, 0xe9, 0x7e, 0xa8, 0x31, 0x7d, 0x71, 0x78, 0xb1,
    0x35, 0xee, 0xe8, 0x60, 0xec, 0xd1, 0x99, 0x5f, 0x1b, 0x77, 0x18, 0xf6, 0xd5, 0x82, 0xbc, 0xf8,
    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, 0x46, 0x9d,
    0x94, 0x3a, 0xdd, 0xf0, 0x7b, 0xd5, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x47, 0xb4, 0xab, 0xf4,
    0xa5, 0xb2, 0xd0, 0x3d, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1c, 0x43, 0x4f, 0xc6, 0x6e, 0x5f, 0x7b,
    0x20, 0x6b, 0x81, 0xa4, 0x16, 0x8e, 0x15, 0xa2, 0x52, 0xf2, 0x41, 0xe2, 0x33, 0x26, 0x5d, 0x3d,
    0x98, 0xb3, 0xc6, 0x36, 0x87, 0x91, 0x30, 0x02, 0x1d, 0x00, 0xbd, 0x8b, 0x2c, 0x1c, 0xda, 0xff,
    0xcd, 0xab, 0xc8, 0x35, 0xea, 0x96, 0x81, 0x17, 0xa4, 0x95, 0x95, 0x1d, 0x2c, 0xd2, 0x47, 0x99,
    0xf6, 0x44, 0x8f, 0xef, 0x6b, 0xc8, 0x18, 0x18,
};

uint16_t TestDataManagementEndpoint_CertLength = sizeof(TestDataManagementEndpoint_Cert);

uint8_t TestDataManagementEndpoint_PrivateKey[] =
{
    /*
    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHOl63tDxrlFoxEwDkSJksNQK+VMRDwY4+ha2P+igBwYFK4EEACGhPAM6
    AATSrTj6O2pY9gf4BaOvu1jDT3lWtaX2oKc8LFydqOTrkul+qDF9cXixNe7oYOzR
    mV8bdxj21YK8+A==
    -----END EC PRIVATE KEY-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5a, 0x23, 0x30, 0x02, 0x1c,
    0xe9, 0x7a, 0xde, 0xd0, 0xf1, 0xae, 0x51, 0x68, 0xc4, 0x4c, 0x03, 0x91, 0x22, 0x64, 0xb0, 0xd4,
    0x0a, 0xf9, 0x53, 0x11, 0x0f, 0x06, 0x38, 0xfa, 0x16, 0xb6, 0x3f, 0xe8, 0x30, 0x03, 0x39, 0x04,
    0xd2, 0xad, 0x38, 0xfa, 0x3b, 0x6a, 0x58, 0xf6, 0x07, 0xf8, 0x05, 0xa3, 0xaf, 0xbb, 0x58, 0xc3,
    0x4f, 0x79, 0x56, 0xb5, 0xa5, 0xf6, 0xa0, 0xa7, 0x3c, 0x2c, 0x5c, 0x9d, 0xa8, 0xe4, 0xeb, 0x92,
    0xe9, 0x7e, 0xa8, 0x31, 0x7d, 0x71, 0x78, 0xb1, 0x35, 0xee, 0xe8, 0x60, 0xec, 0xd1, 0x99, 0x5f,
    0x1b, 0x77, 0x18, 0xf6, 0xd5, 0x82, 0xbc, 0xf8, 0x18,
};

uint16_t TestDataManagementEndpoint_PrivateKeyLength = sizeof(TestDataManagementEndpoint_PrivateKey);


// Certificate and private key for LogUpload Endpoint
//

uint64_t TestLogUploadEndpoint_NodeId = 0x18B4300200000004ULL;

uint8_t TestLogUploadEndpoint_Cert[] =
{
    /*
    -----BEGIN CERTIFICATE-----
    MIIBkTCCAT+gAwIBAgIISCOySfLYRhUwCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMDEyMDAwMDAwMDMwHhcNMTcwNjEyMDAwMDAwWhcNMjcwNjEz
    MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBAgwQMThCNDMwMDIwMDAwMDAwNDBOMBAG
    ByqGSM49AgEGBSuBBAAhAzoABBYgk7na/Np+h19BS3TGAsEq2oEryZQnvL812JuF
    dAq88ss5v9ukcSwc0K8AvBXhRb0Vq6WFLML0o2owaDAMBgNVHRMBAf8EAjAAMA4G
    A1UdDwEB/wQEAwIFoDAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
    EQYDVR0OBAoECEsDPBq+YzK5MBMGA1UdIwQMMAqACEe0q/SlstA9MAoGCCqGSM49
    BAMCA0AAMD0CHFTZSuFduj6Alv1V7JG/l1ve72Qoh8pAgb/8VuwCHQCnL4NrsWvb
    GD2y/oEmyhBH45c7jWuDb8B0z9aq
    -----END CERTIFICATE-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x48, 0x23, 0xb2, 0x49, 0xf2, 0xd8,
    0x46, 0x15, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x03, 0x00, 0x00, 0x00, 0x12, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x00, 0x27, 0x6c, 0x21, 0x26, 0x05, 0xff, 0x15, 0x97, 0x34, 0x37, 0x06,
    0x27, 0x12, 0x04, 0x00, 0x00, 0x00, 0x02, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0x16, 0x20, 0x93, 0xb9, 0xda, 0xfc, 0xda, 0x7e,
    0x87, 0x5f, 0x41, 0x4b, 0x74, 0xc6, 0x02, 0xc1, 0x2a, 0xda, 0x81, 0x2b, 0xc9, 0x94, 0x27, 0xbc,
    0xbf, 0x35, 0xd8, 0x9b, 0x85, 0x74, 0x0a, 0xbc, 0xf2, 0xcb, 0x39, 0xbf, 0xdb, 0xa4, 0x71, 0x2c,
    0x1c, 0xd0, 0xaf, 0x00, 0xbc, 0x15, 0xe1, 0x45, 0xbd, 0x15, 0xab, 0xa5, 0x85, 0x2c, 0xc2, 0xf4,
    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, 0x03,
    0x3c, 0x1a, 0xbe, 0x63, 0x32, 0xb9, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x47, 0xb4, 0xab, 0xf4,
    0xa5, 0xb2, 0xd0, 0x3d, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1c, 0x54, 0xd9, 0x4a, 0xe1, 0x5d, 0xba,
    0x3e, 0x80, 0x96, 0xfd, 0x55, 0xec, 0x91, 0xbf, 0x97, 0x5b, 0xde, 0xef, 0x64, 0x28, 0x87, 0xca,
    0x40, 0x81, 0xbf, 0xfc, 0x56, 0xec, 0x30, 0x02, 0x1d, 0x00, 0xa7, 0x2f, 0x83, 0x6b, 0xb1, 0x6b,
    0xdb, 0x18, 0x3d, 0xb2, 0xfe, 0x81, 0x26, 0xca, 0x10, 0x47, 0xe3, 0x97, 0x3b, 0x8d, 0x6b, 0x83,
    0x6f, 0xc0, 0x74, 0xcf, 0xd6, 0xaa, 0x18, 0x18,
};

uint16_t TestLogUploadEndpoint_CertLength = sizeof(TestLogUploadEndpoint_Cert);

uint8_t TestLogUploadEndpoint_PrivateKey[] =
{
    /*
    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHKJ4M0FoV1K7X8KTrCKFD4YbY8TD0HNwVYA7fSqgBwYFK4EEACGhPAM6
    AAQWIJO52vzafodfQUt0xgLBKtqBK8mUJ7y/NdibhXQKvPLLOb/bpHEsHNCvALwV
    4UW9FaulhSzC9A==
    -----END EC PRIVATE KEY-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5a, 0x23, 0x30, 0x02, 0x1c,
    0xa2, 0x78, 0x33, 0x41, 0x68, 0x57, 0x52, 0xbb, 0x5f, 0xc2, 0x93, 0xac, 0x22, 0x85, 0x0f, 0x86,
    0x1b, 0x63, 0xc4, 0xc3, 0xd0, 0x73, 0x70, 0x55, 0x80, 0x3b, 0x7d, 0x2a, 0x30, 0x03, 0x39, 0x04,
    0x16, 0x20, 0x93, 0xb9, 0xda, 0xfc, 0xda, 0x7e, 0x87, 0x5f, 0x41, 0x4b, 0x74, 0xc6, 0x02, 0xc1,
    0x2a, 0xda, 0x81, 0x2b, 0xc9, 0x94, 0x27, 0xbc, 0xbf, 0x35, 0xd8, 0x9b, 0x85, 0x74, 0x0a, 0xbc,
    0xf2, 0xcb, 0x39, 0xbf, 0xdb, 0xa4, 0x71, 0x2c, 0x1c, 0xd0, 0xaf, 0x00, 0xbc, 0x15, 0xe1, 0x45,
    0xbd, 0x15, 0xab, 0xa5, 0x85, 0x2c, 0xc2, 0xf4, 0x18,
};

uint16_t TestLogUploadEndpoint_PrivateKeyLength = sizeof(TestLogUploadEndpoint_PrivateKey);


// Certificate and private key for ServiceProvisioning Endpoint
//

uint64_t TestServiceProvisioningEndpoint_NodeId = 0x18B4300200000010ULL;

uint8_t TestServiceProvisioningEndpoint_Cert[] =
{
    /*
    -----BEGIN CERTIFICATE-----
    MIIBkjCCAT+gAwIBAgIIDW0Qz6h+DKUwCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMDEyMDAwMDAwMDMwHhcNMTcwNjEyMDAwMDAwWhcNMjcwNjEz
    MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBAgwQMThCNDMwMDIwMDAwMDAxMDBOMBAG
    ByqGSM49AgEGBSuBBAAhAzoABOYhxkgji2lraC5lB6fnf5noiivxSdIuqlyl997f
    N5E3PpUcehc1TMSCuaM0z1+7I0EI3BEjrsdIo2owaDAMBgNVHRMBAf8EAjAAMA4G
    A1UdDwEB/wQEAwIFoDAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
    EQYDVR0OBAoECEGBrlAnPtvvMBMGA1UdIwQMMAqACEe0q/SlstA9MAoGCCqGSM49
    BAMCA0EAMD4CHQDw3/Ve1it3tPPiKBVZvoNu9NBTQ2AUqMU2siXIAh0AtRx67h7z
    iERhclT4kg89pWrjQa0BA1nic5zrZg==
    -----END CERTIFICATE-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x0d, 0x6d, 0x10, 0xcf, 0xa8, 0x7e,
    0x0c, 0xa5, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x03, 0x00, 0x00, 0x00, 0x12, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x00, 0x27, 0x6c, 0x21, 0x26, 0x05, 0xff, 0x15, 0x97, 0x34, 0x37, 0x06,
    0x27, 0x12, 0x10, 0x00, 0x00, 0x00, 0x02, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0xe6, 0x21, 0xc6, 0x48, 0x23, 0x8b, 0x69, 0x6b,
    0x68, 0x2e, 0x65, 0x07, 0xa7, 0xe7, 0x7f, 0x99, 0xe8, 0x8a, 0x2b, 0xf1, 0x49, 0xd2, 0x2e, 0xaa,
    0x5c, 0xa5, 0xf7, 0xde, 0xdf, 0x37, 0x91, 0x37, 0x3e, 0x95, 0x1c, 0x7a, 0x17, 0x35, 0x4c, 0xc4,
    0x82, 0xb9, 0xa3, 0x34, 0xcf, 0x5f, 0xbb, 0x23, 0x41, 0x08, 0xdc, 0x11, 0x23, 0xae, 0xc7, 0x48,
    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, 0x41, 0x81,
    0xae, 0x50, 0x27, 0x3e, 0xdb, 0xef, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x47, 0xb4, 0xab, 0xf4,
    0xa5, 0xb2, 0xd0, 0x3d, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1d, 0x00, 0xf0, 0xdf, 0xf5, 0x5e, 0xd6,
    0x2b, 0x77, 0xb4, 0xf3, 0xe2, 0x28, 0x15, 0x59, 0xbe, 0x83, 0x6e, 0xf4, 0xd0, 0x53, 0x43, 0x60,
    0x14, 0xa8, 0xc5, 0x36, 0xb2, 0x25, 0xc8, 0x30, 0x02, 0x1d, 0x00, 0xb5, 0x1c, 0x7a, 0xee, 0x1e,
    0xf3, 0x88, 0x44, 0x61, 0x72, 0x54, 0xf8, 0x92, 0x0f, 0x3d, 0xa5, 0x6a, 0xe3, 0x41, 0xad, 0x01,
    0x03, 0x59, 0xe2, 0x73, 0x9c, 0xeb, 0x66, 0x18, 0x18,
};

uint16_t TestServiceProvisioningEndpoint_CertLength = sizeof(TestServiceProvisioningEndpoint_Cert);

uint8_t TestServiceProvisioningEndpoint_PrivateKey[] =
{
    /*
    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHLaAUnZPwfa1XbeF//nlV2CiVeU08pgqLSQmjKSgBwYFK4EEACGhPAM6
    AATmIcZII4tpa2guZQen53+Z6Ior8UnSLqpcpffe3zeRNz6VHHoXNUzEgrmjNM9f
    uyNBCNwRI67HSA==
    -----END EC PRIVATE KEY-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5a, 0x23, 0x30, 0x02, 0x1c,
    0xb6, 0x80, 0x52, 0x76, 0x4f, 0xc1, 0xf6, 0xb5, 0x5d, 0xb7, 0x85, 0xff, 0xf9, 0xe5, 0x57, 0x60,
    0xa2, 0x55, 0xe5, 0x34, 0xf2, 0x98, 0x2a, 0x2d, 0x24, 0x26, 0x8c, 0xa4, 0x30, 0x03, 0x39, 0x04,
    0xe6, 0x21, 0xc6, 0x48, 0x23, 0x8b, 0x69, 0x6b, 0x68, 0x2e, 0x65, 0x07, 0xa7, 0xe7, 0x7f, 0x99,
    0xe8, 0x8a, 0x2b, 0xf1, 0x49, 0xd2, 0x2e, 0xaa, 0x5c, 0xa5, 0xf7, 0xde, 0xdf, 0x37, 0x91, 0x37,
    0x3e, 0x95, 0x1c, 0x7a, 0x17, 0x35, 0x4c, 0xc4, 0x82, 0xb9, 0xa3, 0x34, 0xcf, 0x5f, 0xbb, 0x23,
    0x41, 0x08, 0xdc, 0x11, 0x23, 0xae, 0xc7, 0x48, 0x18,
};

uint16_t TestServiceProvisioningEndpoint_PrivateKeyLength = sizeof(TestServiceProvisioningEndpoint_PrivateKey);


// Certificate and private key for Tunnel Endpoint
//

uint64_t TestTunnelEndpoint_NodeId = 0x18B4300200000011ULL;

uint8_t TestTunnelEndpoint_Cert[] =
{
    /*
    -----BEGIN CERTIFICATE-----
    MIIBkDCCAT+gAwIBAgIIdJ+ay9e9YdAwCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMDEyMDAwMDAwMDMwHhcNMTcwNjEyMDAwMDAwWhcNMjcwNjEz
    MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBAgwQMThCNDMwMDIwMDAwMDAxMTBOMBAG
    ByqGSM49AgEGBSuBBAAhAzoABMzJ/5YN1iExOIZBgA3LxPAkrUXgO3ZqjUrwsgyc
    ZHEixqjosQqizGiNapJVBXmtCOUuATQ5w6mco2owaDAMBgNVHRMBAf8EAjAAMA4G
    A1UdDwEB/wQEAwIFoDAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
    EQYDVR0OBAoECEraJSevWJpQMBMGA1UdIwQMMAqACEe0q/SlstA9MAoGCCqGSM49
    BAMCAz8AMDwCHDT9n4dGrUtnJfBREEckHSwGav+LN4llIShrsJICHBWWm4cHenZu
    LMPn+lZvt/anxhYmWuvOGhrXWeA=
    -----END CERTIFICATE-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x74, 0x9f, 0x9a, 0xcb, 0xd7, 0xbd,
    0x61, 0xd0, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x03, 0x00, 0x00, 0x00, 0x12, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x00, 0x27, 0x6c, 0x21, 0x26, 0x05, 0xff, 0x15, 0x97, 0x34, 0x37, 0x06,
    0x27, 0x12, 0x11, 0x00, 0x00, 0x00, 0x02, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0xcc, 0xc9, 0xff, 0x96, 0x0d, 0xd6, 0x21, 0x31,
    0x38, 0x86, 0x41, 0x80, 0x0d, 0xcb, 0xc4, 0xf0, 0x24, 0xad, 0x45, 0xe0, 0x3b, 0x76, 0x6a, 0x8d,
    0x4a, 0xf0, 0xb2, 0x0c, 0x9c, 0x64, 0x71, 0x22, 0xc6, 0xa8, 0xe8, 0xb1, 0x0a, 0xa2, 0xcc, 0x68,
    0x8d, 0x6a, 0x92, 0x55, 0x05, 0x79, 0xad, 0x08, 0xe5, 0x2e, 0x01, 0x34, 0x39, 0xc3, 0xa9, 0x9c,
    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, 0xda,
    0x25, 0x27, 0xaf, 0x58, 0x9a, 0x50, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x47, 0xb4, 0xab, 0xf4,
    0xa5, 0xb2, 0xd0, 0x3d, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1c, 0x34, 0xfd, 0x9f, 0x87, 0x46, 0xad,
    0x4b, 0x67, 0x25, 0xf0, 0x51, 0x10, 0x47, 0x24, 0x1d, 0x2c, 0x06, 0x6a, 0xff, 0x8b, 0x37, 0x89,
    0x65, 0x21, 0x28, 0x6b, 0xb0, 0x92, 0x30, 0x02, 0x1c, 0x15, 0x96, 0x9b, 0x87, 0x07, 0x7a, 0x76,
    0x6e, 0x2c, 0xc3, 0xe7, 0xfa, 0x56, 0x6f, 0xb7, 0xf6, 0xa7, 0xc6, 0x16, 0x26, 0x5a, 0xeb, 0xce,
    0x1a, 0x1a, 0xd7, 0x59, 0xe0, 0x18, 0x18,
};

uint16_t TestTunnelEndpoint_CertLength = sizeof(TestTunnelEndpoint_Cert);

uint8_t TestTunnelEndpoint_PrivateKey[] =
{
    /*
    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHBkWyJ+tQH+cfDIk/3jTRK9sMJRdW6BuY2vyLE2gBwYFK4EEACGhPAM6
    AATMyf+WDdYhMTiGQYANy8TwJK1F4Dt2ao1K8LIMnGRxIsao6LEKosxojWqSVQV5
    rQjlLgE0OcOpnA==
    -----END EC PRIVATE KEY-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5a, 0x23, 0x30, 0x02, 0x1c,
    0x19, 0x16, 0xc8, 0x9f, 0xad, 0x40, 0x7f, 0x9c, 0x7c, 0x32, 0x24, 0xff, 0x78, 0xd3, 0x44, 0xaf,
    0x6c, 0x30, 0x94, 0x5d, 0x5b, 0xa0, 0x6e, 0x63, 0x6b, 0xf2, 0x2c, 0x4d, 0x30, 0x03, 0x39, 0x04,
    0xcc, 0xc9, 0xff, 0x96, 0x0d, 0xd6, 0x21, 0x31, 0x38, 0x86, 0x41, 0x80, 0x0d, 0xcb, 0xc4, 0xf0,
    0x24, 0xad, 0x45, 0xe0, 0x3b, 0x76, 0x6a, 0x8d, 0x4a, 0xf0, 0xb2, 0x0c, 0x9c, 0x64, 0x71, 0x22,
    0xc6, 0xa8, 0xe8, 0xb1, 0x0a, 0xa2, 0xcc, 0x68, 0x8d, 0x6a, 0x92, 0x55, 0x05, 0x79, 0xad, 0x08,
    0xe5, 0x2e, 0x01, 0x34, 0x39, 0xc3, 0xa9, 0x9c, 0x18,
};

uint16_t TestTunnelEndpoint_PrivateKeyLength = sizeof(TestTunnelEndpoint_PrivateKey);


// Certificate and private key for ServiceRouter Endpoint
//

uint64_t TestServiceRouterEndpoint_NodeId = 0x18B4300200000012ULL;

uint8_t TestServiceRouterEndpoint_Cert[] =
{
    /*
    -----BEGIN CERTIFICATE-----
    MIIBkTCCAT+gAwIBAgIIC6s0jH1dnCQwCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMDEyMDAwMDAwMDMwHhcNMTcwNjEyMDAwMDAwWhcNMjcwNjEz
    MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBAgwQMThCNDMwMDIwMDAwMDAxMjBOMBAG
    ByqGSM49AgEGBSuBBAAhAzoABKYWHDJ+RMBBG7AAp5aXLk2flRo1hUdr2/lSMir9
    CXwvCG/LpJlolpBTvE0Zg964rLD0ssmDhDIdo2owaDAMBgNVHRMBAf8EAjAAMA4G
    A1UdDwEB/wQEAwIFoDAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
    EQYDVR0OBAoECEAF7cfm5WifMBMGA1UdIwQMMAqACEe0q/SlstA9MAoGCCqGSM49
    BAMCA0AAMD0CHQCGnrCcSAsyGb2cv8vCLt4oiYHkx6QFQTuVgc6zAhwmP73EBDry
    QUCKl5J8HIUGANETZUXKiunOY0VY
    -----END CERTIFICATE-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x0b, 0xab, 0x34, 0x8c, 0x7d, 0x5d,
    0x9c, 0x24, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x03, 0x00, 0x00, 0x00, 0x12, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x00, 0x27, 0x6c, 0x21, 0x26, 0x05, 0xff, 0x15, 0x97, 0x34, 0x37, 0x06,
    0x27, 0x12, 0x12, 0x00, 0x00, 0x00, 0x02, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0xa6, 0x16, 0x1c, 0x32, 0x7e, 0x44, 0xc0, 0x41,
    0x1b, 0xb0, 0x00, 0xa7, 0x96, 0x97, 0x2e, 0x4d, 0x9f, 0x95, 0x1a, 0x35, 0x85, 0x47, 0x6b, 0xdb,
    0xf9, 0x52, 0x32, 0x2a, 0xfd, 0x09, 0x7c, 0x2f, 0x08, 0x6f, 0xcb, 0xa4, 0x99, 0x68, 0x96, 0x90,
    0x53, 0xbc, 0x4d, 0x19, 0x83, 0xde, 0xb8, 0xac, 0xb0, 0xf4, 0xb2, 0xc9, 0x83, 0x84, 0x32, 0x1d,
    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, 0x40, 0x05,
    0xed, 0xc7, 0xe6, 0xe5, 0x68, 0x9f, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x47, 0xb4, 0xab, 0xf4,
    0xa5, 0xb2, 0xd0, 0x3d, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1d, 0x00, 0x86, 0x9e, 0xb0, 0x9c, 0x48,
    0x0b, 0x32, 0x19, 0xbd, 0x9c, 0xbf, 0xcb, 0xc2, 0x2e, 0xde, 0x28, 0x89, 0x81, 0xe4, 0xc7, 0xa4,
    0x05, 0x41, 0x3b, 0x95, 0x81, 0xce, 0xb3, 0x30, 0x02, 0x1c, 0x26, 0x3f, 0xbd, 0xc4, 0x04, 0x3a,
    0xf2, 0x41, 0x40, 0x8a, 0x97, 0x92, 0x7c, 0x1c, 0x85, 0x06, 0x00, 0xd1, 0x13, 0x65, 0x45, 0xca,
    0x8a, 0xe9, 0xce, 0x63, 0x45, 0x58, 0x18, 0x18,
};

uint16_t TestServiceRouterEndpoint_CertLength = sizeof(TestServiceRouterEndpoint_Cert);

uint8_t TestServiceRouterEndpoint_PrivateKey[] =
{
    /*
    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHHBiu+dlZYR30HnSqpSiNv7+CzmqL9hNJXp/rPKgBwYFK4EEACGhPAM6
    AASmFhwyfkTAQRuwAKeWly5Nn5UaNYVHa9v5UjIq/Ql8Lwhvy6SZaJaQU7xNGYPe
    uKyw9LLJg4QyHQ==
    -----END EC PRIVATE KEY-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5a, 0x23, 0x30, 0x02, 0x1c,
    0x70, 0x62, 0xbb, 0xe7, 0x65, 0x65, 0x84, 0x77, 0xd0, 0x79, 0xd2, 0xaa, 0x94, 0xa2, 0x36, 0xfe,
    0xfe, 0x0b, 0x39, 0xaa, 0x2f, 0xd8, 0x4d, 0x25, 0x7a, 0x7f, 0xac, 0xf2, 0x30, 0x03, 0x39, 0x04,
    0xa6, 0x16, 0x1c, 0x32, 0x7e, 0x44, 0xc0, 0x41, 0x1b, 0xb0, 0x00, 0xa7, 0x96, 0x97, 0x2e, 0x4d,
    0x9f, 0x95, 0x1a, 0x35, 0x85, 0x47, 0x6b, 0xdb, 0xf9, 0x52, 0x32, 0x2a, 0xfd, 0x09, 0x7c, 0x2f,
    0x08, 0x6f, 0xcb, 0xa4, 0x99, 0x68, 0x96, 0x90, 0x53, 0xbc, 0x4d, 0x19, 0x83, 0xde, 0xb8, 0xac,
    0xb0, 0xf4, 0xb2, 0xc9, 0x83, 0x84, 0x32, 0x1d, 0x18,
};

uint16_t TestServiceRouterEndpoint_PrivateKeyLength = sizeof(TestServiceRouterEndpoint_PrivateKey);


// Certificate and private key for FileDownload Endpoint
//

uint64_t TestFileDownloadEndpoint_NodeId = 0x18B4300200000013ULL;

uint8_t TestFileDownloadEndpoint_Cert[] =
{
    /*
    -----BEGIN CERTIFICATE-----
    MIIBkjCCAT+gAwIBAgIIebXo5XD6iwcwCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMDEyMDAwMDAwMDMwHhcNMTcwNjEyMDAwMDAwWhcNMjcwNjEz
    MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBAgwQMThCNDMwMDIwMDAwMDAxMzBOMBAG
    ByqGSM49AgEGBSuBBAAhAzoABCpmzv1KnqYczgFfIH+BuZHymakSKHTayzplfRmi
    wO95iySpFL6jiU64YYUTlx5Vps9xR8zbNHvuo2owaDAMBgNVHRMBAf8EAjAAMA4G
    A1UdDwEB/wQEAwIFoDAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
    EQYDVR0OBAoECE0nONFonzSsMBMGA1UdIwQMMAqACEe0q/SlstA9MAoGCCqGSM49
    BAMCA0EAMD4CHQD6o2s6XNglNihw4Y/WUWpSnKXwmBQfZ6KbHsa7Ah0AmSfGohHb
    WwIKgOWdWq2Ulp1iL5Cm4ppnRiaBHg==
    -----END CERTIFICATE-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x79, 0xb5, 0xe8, 0xe5, 0x70, 0xfa,
    0x8b, 0x07, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x03, 0x00, 0x00, 0x00, 0x12, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x00, 0x27, 0x6c, 0x21, 0x26, 0x05, 0xff, 0x15, 0x97, 0x34, 0x37, 0x06,
    0x27, 0x12, 0x13, 0x00, 0x00, 0x00, 0x02, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0x2a, 0x66, 0xce, 0xfd, 0x4a, 0x9e, 0xa6, 0x1c,
    0xce, 0x01, 0x5f, 0x20, 0x7f, 0x81, 0xb9, 0x91, 0xf2, 0x99, 0xa9, 0x12, 0x28, 0x74, 0xda, 0xcb,
    0x3a, 0x65, 0x7d, 0x19, 0xa2, 0xc0, 0xef, 0x79, 0x8b, 0x24, 0xa9, 0x14, 0xbe, 0xa3, 0x89, 0x4e,
    0xb8, 0x61, 0x85, 0x13, 0x97, 0x1e, 0x55, 0xa6, 0xcf, 0x71, 0x47, 0xcc, 0xdb, 0x34, 0x7b, 0xee,
    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, 0x27,
    0x38, 0xd1, 0x68, 0x9f, 0x34, 0xac, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x47, 0xb4, 0xab, 0xf4,
    0xa5, 0xb2, 0xd0, 0x3d, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1d, 0x00, 0xfa, 0xa3, 0x6b, 0x3a, 0x5c,
    0xd8, 0x25, 0x36, 0x28, 0x70, 0xe1, 0x8f, 0xd6, 0x51, 0x6a, 0x52, 0x9c, 0xa5, 0xf0, 0x98, 0x14,
    0x1f, 0x67, 0xa2, 0x9b, 0x1e, 0xc6, 0xbb, 0x30, 0x02, 0x1d, 0x00, 0x99, 0x27, 0xc6, 0xa2, 0x11,
    0xdb, 0x5b, 0x02, 0x0a, 0x80, 0xe5, 0x9d, 0x5a, 0xad, 0x94, 0x96, 0x9d, 0x62, 0x2f, 0x90, 0xa6,
    0xe2, 0x9a, 0x67, 0x46, 0x26, 0x81, 0x1e, 0x18, 0x18,
};

uint16_t TestFileDownloadEndpoint_CertLength = sizeof(TestFileDownloadEndpoint_Cert);

uint8_t TestFileDownloadEndpoint_PrivateKey[] =
{
    /*
    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHDXcE/d5ZlHh1hmt1AePNHG1W9eFZhRTLydroFugBwYFK4EEACGhPAM6
    AAQqZs79Sp6mHM4BXyB/gbmR8pmpEih02ss6ZX0ZosDveYskqRS+o4lOuGGFE5ce
    VabPcUfM2zR77g==
    -----END EC PRIVATE KEY-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5a, 0x23, 0x30, 0x02, 0x1c,
    0x35, 0xdc, 0x13, 0xf7, 0x79, 0x66, 0x51, 0xe1, 0xd6, 0x19, 0xad, 0xd4, 0x07, 0x8f, 0x34, 0x71,
    0xb5, 0x5b, 0xd7, 0x85, 0x66, 0x14, 0x53, 0x2f, 0x27, 0x6b, 0xa0, 0x5b, 0x30, 0x03, 0x39, 0x04,
    0x2a, 0x66, 0xce, 0xfd, 0x4a, 0x9e, 0xa6, 0x1c, 0xce, 0x01, 0x5f, 0x20, 0x7f, 0x81, 0xb9, 0x91,
    0xf2, 0x99, 0xa9, 0x12, 0x28, 0x74, 0xda, 0xcb, 0x3a, 0x65, 0x7d, 0x19, 0xa2, 0xc0, 0xef, 0x79,
    0x8b, 0x24, 0xa9, 0x14, 0xbe, 0xa3, 0x89, 0x4e, 0xb8, 0x61, 0x85, 0x13, 0x97, 0x1e, 0x55, 0xa6,
    0xcf, 0x71, 0x47, 0xcc, 0xdb, 0x34, 0x7b, 0xee, 0x18,
};

uint16_t TestFileDownloadEndpoint_PrivateKeyLength = sizeof(TestFileDownloadEndpoint_PrivateKey);


// Certificate and private key for BastionService Endpoint
//

uint64_t TestBastionServiceEndpoint_NodeId = 0x18B4300200000014ULL;

uint8_t TestBastionServiceEndpoint_Cert[] =
{
    /*
    -----BEGIN CERTIFICATE-----
    MIIBkDCCAT+gAwIBAgIIehMHw61ac6MwCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
    gsMrAQMMEDE4QjQzMDEyMDAwMDAwMDMwHhcNMTcwNjEyMDAwMDAwWhcNMjcwNjEz
    MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBAgwQMThCNDMwMDIwMDAwMDAxNDBOMBAG
    ByqGSM49AgEGBSuBBAAhAzoABJSTls9PeNRsea5OJejODx7qr/JlWkp7akNcu/1y
    qgEtrQDY2M9Eav0+o3a3ZRtPCgUTAI6SFU0Wo2owaDAMBgNVHRMBAf8EAjAAMA4G
    A1UdDwEB/wQEAwIFoDAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEw
    EQYDVR0OBAoECEtq5ay4nYw7MBMGA1UdIwQMMAqACEe0q/SlstA9MAoGCCqGSM49
    BAMCAz8AMDwCHFuxMrW7EcgGbMXPXJ9uTxaP0YFQsOkHldQ0eCoCHEPtqUPC3h+J
    Fd9mIcHYk8KnL4/oehKugkYUoEE=
    -----END CERTIFICATE-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x7a, 0x13, 0x07, 0xc3, 0xad, 0x5a,
    0x73, 0xa3, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x03, 0x00, 0x00, 0x00, 0x12, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x00, 0x27, 0x6c, 0x21, 0x26, 0x05, 0xff, 0x15, 0x97, 0x34, 0x37, 0x06,
    0x27, 0x12, 0x14, 0x00, 0x00, 0x00, 0x02, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0x94, 0x93, 0x96, 0xcf, 0x4f, 0x78, 0xd4, 0x6c,
    0x79, 0xae, 0x4e, 0x25, 0xe8, 0xce, 0x0f, 0x1e, 0xea, 0xaf, 0xf2, 0x65, 0x5a, 0x4a, 0x7b, 0x6a,
    0x43, 0x5c, 0xbb, 0xfd, 0x72, 0xaa, 0x01, 0x2d, 0xad, 0x00, 0xd8, 0xd8, 0xcf, 0x44, 0x6a, 0xfd,
    0x3e, 0xa3, 0x76, 0xb7, 0x65, 0x1b, 0x4f, 0x0a, 0x05, 0x13, 0x00, 0x8e, 0x92, 0x15, 0x4d, 0x16,
    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, 0x6a,
    0xe5, 0xac, 0xb8, 0x9d, 0x8c, 0x3b, 0x18, 0x35, 0x80, 0x30, 0x02, 0x08, 0x47, 0xb4, 0xab, 0xf4,
    0xa5, 0xb2, 0xd0, 0x3d, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1c, 0x5b, 0xb1, 0x32, 0xb5, 0xbb, 0x11,
    0xc8, 0x06, 0x6c, 0xc5, 0xcf, 0x5c, 0x9f, 0x6e, 0x4f, 0x16, 0x8f, 0xd1, 0x81, 0x50, 0xb0, 0xe9,
    0x07, 0x95, 0xd4, 0x34, 0x78, 0x2a, 0x30, 0x02, 0x1c, 0x43, 0xed, 0xa9, 0x43, 0xc2, 0xde, 0x1f,
    0x89, 0x15, 0xdf, 0x66, 0x21, 0xc1, 0xd8, 0x93, 0xc2, 0xa7, 0x2f, 0x8f, 0xe8, 0x7a, 0x12, 0xae,
    0x82, 0x46, 0x14, 0xa0, 0x41, 0x18, 0x18,
};

uint16_t TestBastionServiceEndpoint_CertLength = sizeof(TestBastionServiceEndpoint_Cert);

uint8_t TestBastionServiceEndpoint_PrivateKey[] =
{
    /*
    -----BEGIN EC PARAMETERS-----
    BgUrgQQAIQ==
    -----END EC PARAMETERS-----
    -----BEGIN EC PRIVATE KEY-----
    MGgCAQEEHF8/Yg8lMypYfDOqFgg+aOD4QWvkJi9shDT0UoCgBwYFK4EEACGhPAM6
    AASUk5bPT3jUbHmuTiXozg8e6q/yZVpKe2pDXLv9cqoBLa0A2NjPRGr9PqN2t2Ub
    TwoFEwCOkhVNFg==
    -----END EC PRIVATE KEY-----
    */

    0xd5, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x26, 0x01, 0x25, 0x00, 0x5a, 0x23, 0x30, 0x02, 0x1c,
    0x5f, 0x3f, 0x62, 0x0f, 0x25, 0x33, 0x2a, 0x58, 0x7c, 0x33, 0xaa, 0x16, 0x08, 0x3e, 0x68, 0xe0,
    0xf8, 0x41, 0x6b, 0xe4, 0x26, 0x2f, 0x6c, 0x84, 0x34, 0xf4, 0x52, 0x80, 0x30, 0x03, 0x39, 0x04,
    0x94, 0x93, 0x96, 0xcf, 0x4f, 0x78, 0xd4, 0x6c, 0x79, 0xae, 0x4e, 0x25, 0xe8, 0xce, 0x0f, 0x1e,
    0xea, 0xaf, 0xf2, 0x65, 0x5a, 0x4a, 0x7b, 0x6a, 0x43, 0x5c, 0xbb, 0xfd, 0x72, 0xaa, 0x01, 0x2d,
    0xad, 0x00, 0xd8, 0xd8, 0xcf, 0x44, 0x6a, 0xfd, 0x3e, 0xa3, 0x76, 0xb7, 0x65, 0x1b, 0x4f, 0x0a,
    0x05, 0x13, 0x00, 0x8e, 0x92, 0x15, 0x4d, 0x16, 0x18,
};

uint16_t TestBastionServiceEndpoint_PrivateKeyLength = sizeof(TestBastionServiceEndpoint_PrivateKey);


// Certificate and private key for Mock Service Endpoint Root
//

uint64_t TestMockRoot_CAId = 0x18B430EEEE000001ULL;

uint8_t TestMockRoot_Cert[] =
{
    /*
     -----BEGIN CERTIFICATE-----
     MIIBcTCCASCgAwIBAgIIF0KR10ZaOA4wCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
     gsMrAQMMEDE4QjQzMEVFMTIwMDAwMDEwHhcNMTcwNjAxMDAwMDAwWhcNNDIwNTMx
     MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBAwwQMThCNDMwRUUxMjAwMDAwMTBOMBAG
     ByqGSM49AgEGBSuBBAAhAzoABPYE52diHCH5+xE/Gevlw3iN+9YL2sHNrfbMv5Ca
     dgnJK8SJMH7C+c4INZd9jFU/M0wYtkSDU5qJo0swSTAPBgNVHRMBAf8EBTADAQH/
     MA4GA1UdDwEB/wQEAwIBBjARBgNVHQ4ECgQITig8if5ujqEwEwYDVR0jBAwwCoAI
     Tig8if5ujqEwCgYIKoZIzj0EAwIDPwAwPAIcVzNbHv1EHMlpLfhChh+TI/hGJOHW
     uUrA8SCT5AIcKQVlLJMMlm6uhDKDQVR4VmggsNssEdzTJwJhUQ==
     -----END CERTIFICATE-----
    */
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x17, 0x42, 0x91, 0xd7, 0x46, 0x5a,
    0x38, 0x0e, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x01, 0x00, 0x00, 0x12, 0xee, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x80, 0xa6, 0x5d, 0x21, 0x26, 0x05, 0x7f, 0x64, 0x42, 0x51, 0x37, 0x06,
    0x27, 0x13, 0x01, 0x00, 0x00, 0x12, 0xee, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0xf6, 0x04, 0xe7, 0x67, 0x62, 0x1c, 0x21, 0xf9,
    0xfb, 0x11, 0x3f, 0x19, 0xeb, 0xe5, 0xc3, 0x78, 0x8d, 0xfb, 0xd6, 0x0b, 0xda, 0xc1, 0xcd, 0xad,
    0xf6, 0xcc, 0xbf, 0x90, 0x9a, 0x76, 0x09, 0xc9, 0x2b, 0xc4, 0x89, 0x30, 0x7e, 0xc2, 0xf9, 0xce,
    0x08, 0x35, 0x97, 0x7d, 0x8c, 0x55, 0x3f, 0x33, 0x4c, 0x18, 0xb6, 0x44, 0x83, 0x53, 0x9a, 0x89,
    0x35, 0x83, 0x29, 0x01, 0x29, 0x02, 0x18, 0x35, 0x82, 0x29, 0x01, 0x24, 0x02, 0x60, 0x18, 0x35,
    0x81, 0x30, 0x02, 0x08, 0x4e, 0x28, 0x3c, 0x89, 0xfe, 0x6e, 0x8e, 0xa1, 0x18, 0x35, 0x80, 0x30,
    0x02, 0x08, 0x4e, 0x28, 0x3c, 0x89, 0xfe, 0x6e, 0x8e, 0xa1, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1c,
    0x57, 0x33, 0x5b, 0x1e, 0xfd, 0x44, 0x1c, 0xc9, 0x69, 0x2d, 0xf8, 0x42, 0x86, 0x1f, 0x93, 0x23,
    0xf8, 0x46, 0x24, 0xe1, 0xd6, 0xb9, 0x4a, 0xc0, 0xf1, 0x20, 0x93, 0xe4, 0x30, 0x02, 0x1c, 0x29,
    0x05, 0x65, 0x2c, 0x93, 0x0c, 0x96, 0x6e, 0xae, 0x84, 0x32, 0x83, 0x41, 0x54, 0x78, 0x56, 0x68,
    0x20, 0xb0, 0xdb, 0x2c, 0x11, 0xdc, 0xd3, 0x27, 0x02, 0x61, 0x51, 0x18, 0x18,
};

uint16_t TestMockRoot_CertLength = sizeof(TestMockRoot_Cert);


// Certificate and private key for Mock Service Endpoint CA
//

uint64_t TestMockServiceEndpointCA_CAId = 0x18B430EEEE000002ULL;

uint8_t TestMockServiceEndpointCA_Cert[] =
{
    /*
     -----BEGIN CERTIFICATE-----
     MIIBczCCASCgAwIBAgIIBdBn3AonyMYwCgYIKoZIzj0EAwIwIjEgMB4GCisGAQQB
     gsMrAQMMEDE4QjQzMEVFMTIwMDAwMDEwHhcNMTcwNjEyMDAwMDAwWhcNNDIwNjEx
     MjM1OTU5WjAiMSAwHgYKKwYBBAGCwysBAwwQMThCNDMwMTIwMDAwMDAwMzBOMBAG
     ByqGSM49AgEGBSuBBAAhAzoABOd2OzYJP/hiIVFQMv1+1z1J9aw/X/q2BgzaNRJz
     6yIhfjhuPNZagMy/XyHOfncczU1d9W24EnTWo0swSTAPBgNVHRMBAf8EBTADAQH/
     MA4GA1UdDwEB/wQEAwIBBjARBgNVHQ4ECgQIR7Sr9KWy0D0wEwYDVR0jBAwwCoAI
     Tig8if5ujqEwCgYIKoZIzj0EAwIDQQAwPgIdAMQ5ZEQIQNuB4xbEdg5wqOfSp0Qy
     55UZ4/ku1zMCHQDqp1GjQcTY/tUq1uAKAzYBJly8XLD0cQ9WOBhr
     -----END CERTIFICATE-----
    */
    0xd5, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x30, 0x01, 0x08, 0x05, 0xd0, 0x67, 0xdc, 0x0a, 0x27,
    0xc8, 0xc6, 0x24, 0x02, 0x05, 0x37, 0x03, 0x27, 0x13, 0x01, 0x00, 0x00, 0x12, 0xee, 0x30, 0xb4,
    0x18, 0x18, 0x26, 0x04, 0x00, 0x27, 0x6c, 0x21, 0x26, 0x05, 0xff, 0xe4, 0x50, 0x51, 0x37, 0x06,
    0x27, 0x13, 0x03, 0x00, 0x00, 0x00, 0x12, 0x30, 0xb4, 0x18, 0x18, 0x24, 0x07, 0x02, 0x26, 0x08,
    0x25, 0x00, 0x5a, 0x23, 0x30, 0x0a, 0x39, 0x04, 0xe7, 0x76, 0x3b, 0x36, 0x09, 0x3f, 0xf8, 0x62,
    0x21, 0x51, 0x50, 0x32, 0xfd, 0x7e, 0xd7, 0x3d, 0x49, 0xf5, 0xac, 0x3f, 0x5f, 0xfa, 0xb6, 0x06,
    0x0c, 0xda, 0x35, 0x12, 0x73, 0xeb, 0x22, 0x21, 0x7e, 0x38, 0x6e, 0x3c, 0xd6, 0x5a, 0x80, 0xcc,
    0xbf, 0x5f, 0x21, 0xce, 0x7e, 0x77, 0x1c, 0xcd, 0x4d, 0x5d, 0xf5, 0x6d, 0xb8, 0x12, 0x74, 0xd6,
    0x35, 0x83, 0x29, 0x01, 0x29, 0x02, 0x18, 0x35, 0x82, 0x29, 0x01, 0x24, 0x02, 0x60, 0x18, 0x35,
    0x81, 0x30, 0x02, 0x08, 0x47, 0xb4, 0xab, 0xf4, 0xa5, 0xb2, 0xd0, 0x3d, 0x18, 0x35, 0x80, 0x30,
    0x02, 0x08, 0x4e, 0x28, 0x3c, 0x89, 0xfe, 0x6e, 0x8e, 0xa1, 0x18, 0x35, 0x0c, 0x30, 0x01, 0x1d,
    0x00, 0xc4, 0x39, 0x64, 0x44, 0x08, 0x40, 0xdb, 0x81, 0xe3, 0x16, 0xc4, 0x76, 0x0e, 0x70, 0xa8,
    0xe7, 0xd2, 0xa7, 0x44, 0x32, 0xe7, 0x95, 0x19, 0xe3, 0xf9, 0x2e, 0xd7, 0x33, 0x30, 0x02, 0x1d,
    0x00, 0xea, 0xa7, 0x51, 0xa3, 0x41, 0xc4, 0xd8, 0xfe, 0xd5, 0x2a, 0xd6, 0xe0, 0x0a, 0x03, 0x36,
    0x01, 0x26, 0x5c, 0xbc, 0x5c, 0xb0, 0xf4, 0x71, 0x0f, 0x56, 0x38, 0x18, 0x6b, 0x18, 0x18,
};

uint16_t TestMockServiceEndpointCA_CertLength = sizeof(TestMockServiceEndpointCA_Cert);


TestNodeCert TestNodeCerts[] =
{
    { 0x18B4300000000001ULL, TestDevice1_Cert, sizeof(TestDevice1_Cert), TestDevice1_PrivateKey, sizeof(TestDevice1_PrivateKey) },
    { 0x18B4300000000002ULL, TestDevice2_Cert, sizeof(TestDevice2_Cert), TestDevice2_PrivateKey, sizeof(TestDevice2_PrivateKey) },
    { 0x18B4300000000003ULL, TestDevice3_Cert, sizeof(TestDevice3_Cert), TestDevice3_PrivateKey, sizeof(TestDevice3_PrivateKey) },
    { 0x18B4300000000004ULL, TestDevice4_Cert, sizeof(TestDevice4_Cert), TestDevice4_PrivateKey, sizeof(TestDevice4_PrivateKey) },
    { 0x18B4300000000005ULL, TestDevice5_Cert, sizeof(TestDevice5_Cert), TestDevice5_PrivateKey, sizeof(TestDevice5_PrivateKey) },
    { 0x18B4300000000006ULL, TestDevice6_Cert, sizeof(TestDevice6_Cert), TestDevice6_PrivateKey, sizeof(TestDevice6_PrivateKey) },
    { 0x18B4300000000007ULL, TestDevice7_Cert, sizeof(TestDevice7_Cert), TestDevice7_PrivateKey, sizeof(TestDevice7_PrivateKey) },
    { 0x18B4300000000008ULL, TestDevice8_Cert, sizeof(TestDevice8_Cert), TestDevice8_PrivateKey, sizeof(TestDevice8_PrivateKey) },
    { 0x18B4300000000009ULL, TestDevice9_Cert, sizeof(TestDevice9_Cert), TestDevice9_PrivateKey, sizeof(TestDevice9_PrivateKey) },
    { 0x18B430000000000AULL, TestDevice10_Cert, sizeof(TestDevice10_Cert), TestDevice10_PrivateKey, sizeof(TestDevice10_PrivateKey) },
    { 0x18B4300200000001ULL, TestDirectoryEndpoint_Cert, sizeof(TestDirectoryEndpoint_Cert), TestDirectoryEndpoint_PrivateKey, sizeof(TestDirectoryEndpoint_PrivateKey) },
    { 0x18B4300200000002ULL, TestSoftwareUpdateEndpoint_Cert, sizeof(TestSoftwareUpdateEndpoint_Cert), TestSoftwareUpdateEndpoint_PrivateKey, sizeof(TestSoftwareUpdateEndpoint_PrivateKey) },
    { 0x18B4300200000003ULL, TestDataManagementEndpoint_Cert, sizeof(TestDataManagementEndpoint_Cert), TestDataManagementEndpoint_PrivateKey, sizeof(TestDataManagementEndpoint_PrivateKey) },
    { 0x18B4300200000004ULL, TestLogUploadEndpoint_Cert, sizeof(TestLogUploadEndpoint_Cert), TestLogUploadEndpoint_PrivateKey, sizeof(TestLogUploadEndpoint_PrivateKey) },
    { 0x18B4300200000010ULL, TestServiceProvisioningEndpoint_Cert, sizeof(TestServiceProvisioningEndpoint_Cert), TestServiceProvisioningEndpoint_PrivateKey, sizeof(TestServiceProvisioningEndpoint_PrivateKey) },
    { 0x18B4300200000011ULL, TestTunnelEndpoint_Cert, sizeof(TestTunnelEndpoint_Cert), TestTunnelEndpoint_PrivateKey, sizeof(TestTunnelEndpoint_PrivateKey) },
    { 0x18B4300200000012ULL, TestServiceRouterEndpoint_Cert, sizeof(TestServiceRouterEndpoint_Cert), TestServiceRouterEndpoint_PrivateKey, sizeof(TestServiceRouterEndpoint_PrivateKey) },
    { 0x18B4300200000013ULL, TestFileDownloadEndpoint_Cert, sizeof(TestFileDownloadEndpoint_Cert), TestFileDownloadEndpoint_PrivateKey, sizeof(TestFileDownloadEndpoint_PrivateKey) },
    { 0x18B4300200000014ULL, TestBastionServiceEndpoint_Cert, sizeof(TestBastionServiceEndpoint_Cert), TestBastionServiceEndpoint_PrivateKey, sizeof(TestBastionServiceEndpoint_PrivateKey) },
    { 0, NULL, 0, NULL, 0 }
};


TestCACert TestCACerts[] =
{
    { TestMockRoot_CAId, TestMockRoot_Cert, TestMockRoot_CertLength },
    { TestMockServiceEndpointCA_CAId, TestMockServiceEndpointCA_Cert, TestMockServiceEndpointCA_CertLength },
    { 0, NULL, 0 }
};


bool GetTestNodeCert(uint64_t nodeId, const uint8_t *& cert, uint16_t& certLen)
{
    for (TestNodeCert *p = TestNodeCerts; p->NodeId != 0; p++)
        if (p->NodeId == nodeId)
        {
            cert = p->Cert;
            certLen = p->CertLength;
            return true;
        }
    return false;
}

bool GetTestNodePrivateKey(uint64_t nodeId, const uint8_t *& key, uint16_t& keyLen)
{
    for (TestNodeCert *p = TestNodeCerts; p->NodeId != 0; p++)
        if (p->NodeId == nodeId)
        {
            key = p->PrivateKey;
            keyLen = p->PrivateKeyLength;
            return true;
        }
    return false;
}

bool GetTestCACert(uint64_t caId, const uint8_t *& cert, uint16_t& certLen)
{
    for (TestCACert *p = TestCACerts; p->CAId != 0; p++)
        if (p->CAId == caId)
        {
            cert = p->Cert;
            certLen = p->CertLength;
            return true;
        }
    return false;
}
