ایجاد گواهینامه‌های آزمایشی دستگاه Matter

اگرچه الزامی نیست، اما برخی‌از سناریوهای آزمایش به ایجاد گواهینامه‌های غیرتولیدی Matter نیاز دارند.

برخی‌از ویژگی‌های بوم‌سازگان Google، ازجمله «به‌روزرسانی‌های نرم‌افزار ازطریق هوا برای دستگاه» بااستفاده از VID/PID آزمایشی قابل‌انجام نیست.

این راهنما نحوه ایجاد و درستی‌سنجی گواهینامه‌های غیرتولیدی Matter را برای استفاده در آزمایش توضیح می‌دهد. انواع گواهینامه‌ها عبارت‌اند از:

  1. اظهارنامه گواهینامه (CD)
  2. گواهینامه واسط گواهی محصول (PAI)
  3. گواهینامه گواهی دستگاه (DAC)

درطول فرایند راه‌اندازی، دستگاه دارای گواهینامه Matter باید خود را تأیید کند، یعنی ثابت کند که محصول دارای گواهینامه Matter است. اطلاعات اعتباری مورد استفاده Matter دستگاه برای گواهی شامل موارد زیر است:

  1. جفت کلید گواهی
  2. زنجیره گواهینامه

«گواهینامه گواهی دستگاه» (DAC) اولین پیوند زنجیره گواهینامه است و توسط «گواهینامه واسطه گواهی محصول» (PAI) تأیید می‌شود، که به نوبه خود توسط «مرجع گواهی محصول» (PAA) تأیید می‌شود.

گواهینامه‌ها هم‌زمان با تولید جفت کلید گواهی امضا می‌شوند و بااستفاده از کلید خصوصی «مرجع صدور گواهینامه» در سطح بالاتر امضا می‌شوند و زنجیره اعتماد را تشکیل می‌دهند. بنابراین، گواهینامه DAC با کلید PAI امضا می‌شود و گواهینامه PAI با کلید PAA امضا می‌شود. گواهینامه‌های PAA که در بالای زنجیره قرار دارند، خودامضا هستند. این زنجیره اعتماد ساختار PAA فدرال را تشکیل می‌دهد که توسط دفتر کل انطباق توزیع‌شده (DCL) همگام‌سازی می‌شود.

اطلاعات بیشتر درباره فرایند «گواهی» و «اظهارنامه‌های گواهی» (CD) را می‌توانید در اسناد و پیام‌های تکمیلی گواهی و در «مشخصات Matter» پیدا کنید.

نصب کیت توسعه نرم‌افزار Matter

این دستورالعمل‌ها فرض می‌کند که نصب کاری از Matter SDK دارید. برای اطلاعات بیشتر، لطفاً به اسناد آن در Github مراجعه کنید یا شروع کار با Matter را ببینید.

اگر ابزار hexdump را ندارید، آن را xxd نصب کنید. این ابزار برای چاپ اطلاعات اعتباری در قالب C مفید است:

sudo apt-get install xxd

ساختن chip-cert

  1. مطمئن شوید که روی نسخه جدیدی از کیت توسعه نرم‌افزار کار می‌کنید. این رویه‌ها در Github SHA 0b17bce8، در شاخه v1.0-branch آزمایش شده است:

    $ cd connectedhomeip
    $ git checkout v1.0-branch
    $ git pull
    
  2. ‫chip-cert را بسازید، که ابزار استفاده‌شده برای چندین عملیات در اطلاعات اعتباری برای Matter دستگاه است:

    1. پیکربندی ساخت:

      $ cd src/credentials
      $ source ../../scripts/activate.sh
      $ gn gen out
      

      برونداد نمونه gn:

      Done. Made 5774 targets from 289 files in 658ms
      
    2. اجرای ساخت:

      $ ninja -C out
      

      برونداد نمونه ninja:

      ninja: Entering directory `out'
      [2000/2000] stamp obj/default.stamp
      

ضرب کردن گواهینامه‌ها

‫VID/PID سفارشی‌تان را به‌عنوان متغیرهای محیطی صادر کنید تا احتمال خطای دفتری هنگام ویرایش آرگومان‌های فرمان کاهش یابد:

$ cd ../..
$ export VID=hexVendorId
$ export PID=hexProductId

تولید کردن سی‌دی

  1. تولید CD بااستفاده از chip-cert. درحال‌حاضر، «کمیسر» فقط تأیید می‌کند که VID و PID با داده‌های نمایان‌شده در جای دیگر توسط دستگاه مطابقت داشته باشند: «خوشه اطلاعات پایه»، DAC، و منشأ DAC (درصورت وجود). می‌توانید فیلدهای دیگر را بدون تغییر بگذارید:

    $ src/credentials/out/chip-cert gen-cd \
      --key credentials/test/certification-declaration/Chip-Test-CD-Signing-Key.pem \
      --cert credentials/test/certification-declaration/Chip-Test-CD-Signing-Cert.pem \
      --out credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der \
      --format-version "1" \
      --vendor-id "${VID}" \
      --product-id "${PID}" \
      --device-type-id "0x1234" \
      --certificate-id "ZIG20141ZB330001-24" \
      --security-level "0" \
      --security-info "0" \
      --version-number "9876" \
      --certification-type "0"
    
  2. سی‌دی را درستی‌سنجی کنید. مطمئن شوید که حاوی VID/PID شما (در قالب اعشاری) باشد:

    $ src/credentials/out/chip-cert print-cd credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der
    

    برونداد نمونه:

    SignerKeyId value: hex:62FA823359ACFAA9963E1CFA140ADDF504F37160
    0x01, tag[Anonymous]: 0xffffffff, type: Structure (0x15), container:
    0x04,     tag[Context Specific]: 0x0, type: Unsigned Fixed Point (0x04), value: 1
    0x08,     tag[Context Specific]: 0x1, type: Unsigned Fixed Point (0x04), value: XXXXX // <- VID
    0x0A,     tag[Context Specific]: 0x2, type: Array (0x16), container:
    0x0D,         tag[Anonymous]: 0xffffffff, type: Unsigned Fixed Point (0x04), value: XXXXX // <- PID
    0x12,     tag[Context Specific]: 0x3, type: Unsigned Fixed Point (0x04), value: 4660
    0x15,     tag[Context Specific]: 0x4, type: UTF-8 String (0x0c), length: 19, value: "ZIG20141ZB330001-24"
    0x2B,     tag[Context Specific]: 0x5, type: Unsigned Fixed Point (0x04), value: 0
    0x2E,     tag[Context Specific]: 0x6,type: Unsigned Fixed Point (0x04), value: 0
    0x32,     tag[Context Specific]: 0x7, type: Unsigned Fixed Point (0x04), value: 39030
    0x35,     tag[Context Specific]: 0x8, type: Unsigned Fixed Point (0x04), value: 0
    

تولید PAI و DAC

در این مثال، از گواهی Matterمرجع گواهی محصول آزمایشی (PAA) و کلید امضای Chip-Test-PAA-NoVID خود به‌عنوان گواهی ریشه استفاده می‌کنیم. از آن به‌عنوان مرجع صدور گواهی ریشه برای تولید PAI و DAC خودمان استفاده خواهیم کرد.

  1. تولید PAI بااستفاده از PAA. می‌توانید به‌صورت اختیاری اطلاعات PID را در PAI بگنجانید، اما حذف آن انعطاف‌پذیری بیشتری برای آزمایش به شما می‌دهد. اگر برای «شناسه‌های محصول» اضافی به «کدهای دسترسی داده» نیاز دارید، می‌توانید فقط مرحله تولید «کدهای دسترسی داده» را اجرا کنید:

    $ src/credentials/out/chip-cert gen-att-cert --type i \
      --subject-cn "Matter Test PAI" \
      --subject-vid "${VID}" \
      --valid-from "2021-06-28 14:23:43" \
      --lifetime "4294967295" \
      --ca-key credentials/test/attestation/Chip-Test-PAA-NoVID-Key.pem \
      --ca-cert credentials/test/attestation/Chip-Test-PAA-NoVID-Cert.pem \
      --out-key credentials/test/attestation/"test-PAI-${VID}-key".pem \
      --out credentials/test/attestation/"test-PAI-${VID}-cert".pem
    
  2. تولید DAC بااستفاده از PAI:

    $ src/credentials/out/chip-cert gen-att-cert --type d \
      --subject-cn "Matter Test DAC 0" \
      --subject-vid "${VID}" \
      --subject-pid "${PID}" \
      --valid-from "2021-06-28 14:23:43" \
      --lifetime "4294967295" \
      --ca-key credentials/test/attestation/"test-PAI-${VID}-key".pem \
      --ca-cert credentials/test/attestation/"test-PAI-${VID}-cert".pem \
      --out-key credentials/test/attestation/"test-DAC-${VID}-${PID}-key".pem \
      --out credentials/test/attestation/"test-DAC-${VID}-${PID}-cert".pem
    
  3. زنجیره DAC،‏ PAI و PAA را درستی‌سنجی کنید. اگر هیچ خطایی در برونداد ظاهر نشود، یعنی زنجیره گواهینامه تصدیق باموفقیت درستی‌سنجی شده است:

    $ src/credentials/out/chip-cert validate-att-cert \
    --dac credentials/test/attestation/"test-DAC-${VID}-${PID}-cert".pem \
    --pai credentials/test/attestation/"test-PAI-${VID}-cert".pem \
    --paa credentials/test/attestation/Chip-Test-PAA-NoVID-Cert.pem
    
  4. می‌توانید کلیدهایتان را بااستفاده از openssl بازرسی کنید:

    $ openssl ec -noout -text -in \
      credentials/test/attestation/test-DAC-${VID}-${PID}-key.pem
    

    برونداد نمونه:

    read EC key
    Private-Key: (256 bit)
    priv:
        c9:f2:b3:04:b2:db:0d:6f:cd:c6:be:f3:7b:76:8d:
        8c:01:4e:0b:9e:ce:3e:72:49:3c:0e:35:63:7c:6c:
        6c:d6
    pub:
        04:4f:93:ba:3b:bf:63:90:73:98:76:1e:af:87:79:
        11:e6:77:e8:e2:df:a7:49:f1:7c:ac:a8:a6:91:76:
        08:5b:39:ce:6c:72:db:6d:9a:92:b3:ba:05:b0:e8:
        31:a0:bf:36:50:2b:5c:72:55:7f:11:c8:01:ff:3a:
        46:b9:19:60:28
    ASN1 OID: prime256v1
    NIST CURVE: P-256
    
  5. همچنین می‌توانید از openssl برای بازرسی گواهینامه‌های تولیدشده استفاده کنید:

    $ openssl x509 -noout -text -in \
      credentials/test/attestation/test-DAC-${VID}-${PID}-cert.pem
    

    برونداد نمونه:

    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 2875998130766646679 (0x27e9990fef088d97)
            Signature Algorithm: ecdsa-with-SHA256
            Issuer: CN = Matter Test PAI, 1.3.6.1.4.1.37244.2.1 = hexVendorId
            Validity
                Not Before: Jun 28 14:23:43 2021 GMT
                Not After : Dec 31 23:59:59 9999 GMT
            Subject: CN = Matter Test DAC 0, 1.3.6.1.4.1.37244.2.1 = hexVendorId, 1.3.6.1.4.1.37244.2.2 = hexProductId
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (256 bit)
                    pub:
                        04:4f:93:ba:3b:bf:63:90:73:98:76:1e:af:87:79:
                        11:e6:77:e8:e2:df:a7:49:f1:7c:ac:a8:a6:91:76:
                        08:5b:39:ce:6c:72:db:6d:9a:92:b3:ba:05:b0:e8:
                        31:a0:bf:36:50:2b:5c:72:55:7f:11:c8:01:ff:3a:
                        46:b9:19:60:28
                    ASN1 OID: prime256v1
                    NIST CURVE: P-256
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:FALSE
                X509v3 Key Usage: critical
                    Digital Signature
                X509v3 Subject Key Identifier:
                    21:0A:CA:B1:B6:5F:17:65:D8:61:19:73:84:1A:9D:52:81:19:C5:39
                X509v3 Authority Key Identifier:
                    37:7F:24:9A:73:41:4B:16:6E:6A:42:6E:F5:E8:89:FB:75:F8:77:BB
        Signature Algorithm: ecdsa-with-SHA256
        Signature Value:
            30:45:02:20:38:8f:c5:0d:3e:90:95:dd:7d:7c:e9:5a:05:19:
            1f:2d:14:08:a3:d7:0e:b5:15:6d:d3:b0:0b:f7:b8:28:4d:bf:
            02:21:00:d4:05:30:43:a6:05:00:0e:b9:99:0d:34:3d:75:fe:
            d3:c1:4e:73:ff:e7:05:64:7a:62:8d:2d:38:8f:fd:4d:ad
    

PAA

از فرایندی مشابه می‌توان برای تولید PAA خودامضا استفاده کرد، اما انجام این کار ضروری نیست.

درعوض، کاری که در اینجا انجام داده‌ایم این است که از PAA توسعه خودامضاشده موجودی استفاده کنیم که اطلاعات VID را ندارد.

برای نمونه‌های بیشتر از تولید CD، به credentials/test/gen-test-cds.sh نگاه کنید و برای نمونه‌های بیشتر از تولید PAA،‏ PAI، و DAC، به credentials/test/gen-test-attestation-certs.sh مراجعه کنید

جایگزین کردن گواهینامه‌ها

جایگزین کردن PAA و PAI

  1. برنامه کمکی زیر را اجرا کنید که از ابزار گواهینامه CHIP (chip-cert) برای تولید آرایه‌های سبک C از گواهینامه‌هایتان استفاده می‌کند.

بارگیری کردن دستورگان «کمک‌رسان گواهینامه‌های جاسازی‌شدنی»

#!/bin/bash

#
# generate-embeddable-certs.sh script
# —----------------------------------
#
# This script generates self-minted DAC and PAI.
# The output may easily be included in your C++ source code.
#

# Edit this information with your paths and certificates
folder="credentials/test/attestation"
chip_cert_tool="src/credentials/out/chip-cert"
cert_file_der="${folder}/test-PAI-${VID}-cert.der"
cert_file_pem="${folder}/test-PAI-${VID}-cert.pem"
key_file_pem="${folder}/test-PAI-${VID}-key.pem"

type="Pai"

printf "namespace chip {\n"
printf "namespace DevelopmentCerts {\n\n"
printf "#if CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID == ${PID}\n\n"

printcert() {
  # convert cert to DER
  if [ -f "${cert_file_der}" ]; then
      rm "${cert_file_der}"
  fi
  "${chip_cert_tool}" convert-cert "${cert_file_pem}" "${cert_file_der}" --x509-der

  printf "// ------------------------------------------------------------ \n"
  printf "// ${type} CERTIFICATE ${cert_file_der} \n\n"

  printf "constexpr uint8_t ${type}_Cert_Array[] = {\n"
  less -f "${cert_file_der}" | od -t x1 -An | sed 's/\ | sed 's/\>/,/g' | sed 's/^/   /g'
  printf "};\n\n"
  printf "ByteSpan k${type}Cert = ByteSpan(${type}_Cert_Array);\n\n"

  printf "// ${type} PUBLIC KEY FROM ${key_file_pem} \n\n"

  printf "constexpr uint8_t ${type}_PublicKey_Array[] = {\n"
  openssl ec -text -noout -in "${key_file_pem}" 2>/dev/null | sed '/ASN1 OID/d' | sed '/NIST CURVE/d' | sed -n '/pub:/,$p' | sed '/pub:/d' | sed 's/\([0-9a-fA-F][0-9a-fA-F]\)/0x\1/g' | sed 's/:/, /g'
  printf "};\n\n"
  printf "ByteSpan k${type}PublicKey = ByteSpan(${type}_PublicKey_Array);\n\n"

  printf "// ${type} PRIVATE KEY FROM ${key_file_pem} \n\n"

  printf "constexpr uint8_t ${type}_PrivateKey_Array[] = {\n"
  openssl ec -text -noout -in "${key_file_pem}" 2>/dev/null | sed '/read EC key/d' | sed '/Private-Key/d' | sed '/priv:/d' | sed '/pub:/,$d' | sed 's/\([0-9a-fA-F][0-9a-fA-F]\)/0x\1/g' | sed 's/:/, /g'
  printf "};\n\n"
  printf "ByteSpan k${type}PrivateKey = ByteSpan(${type}_PrivateKey_Array);\n\n"
}

# generates PAI
printcert

type="Dac"
cert_file_der="${folder}/test-DAC-${VID}-${PID}-cert.der"
cert_file_pem="${folder}/test-DAC-${VID}-${PID}-cert.pem"
key_file_pem="${folder}/test-DAC-${VID}-${PID}-key.pem"

# generates DAC
printcert

printf "#endif // CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID\n"
printf "} // namespace DevelopmentCerts\n"
printf "} // namespace chip\n"
  1. محتوای برونداد PAI و DAC را در پیاده‌سازی DeviceAttestationCredentialsProvider::GetProductAttestationIntermediateCert کپی کنید.

    در دستگاه‌های تولیدی، PAI و DAC در داده‌های کارخانه قرار دارند، درحالی‌که CD در خود میان‌افزار جاسازی شده است.

    1. اگر هنوز از «داده‌های کارخانه» استفاده نمی‌کنید، شاید بخواهید «اطلاعات شناسایی شخصی» خود را در src/credentials/examples/ExampleDACs.cpp قرار دهید. در این مورد، کد تولیدشده حاصل را به فایل ExampleDACs.cpp خود اضافه کنید:

      ByteSpan kDacCert       = ByteSpan(kDevelopmentDAC_Cert_FFF1_801F);
      ByteSpan kDacPrivateKey = ByteSpan(kDevelopmentDAC_PrivateKey_FFF1_801F);
      ByteSpan kDacPublicKey  = ByteSpan(kDevelopmentDAC_PublicKey_FFF1_801F);
      #endif
      } // namespace DevelopmentCerts
      } // namespace chip
      
      /* ------------------------------------------ */
      /* current end-of-file                        */
      /* ------------------------------------------ */
      
      /* ------------------------------------------ */
      /* output of creds-codelab.sh script          */
      /* ------------------------------------------ */
      
      namespace chip {
      namespace DevelopmentCerts {
      
      #if CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID == hexProductId
      
      ...
      
      ByteSpan kDacPrivateKey = ByteSpan(Dac_PrivateKey_Array);
      
      #endif // CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID
      } // namespace DevelopmentCerts
      } // namespace chip
      
    2. اگر از «داده‌های کارخانه» یا «ارائه‌دهنده اطلاعات اعتباری» سفارشی استفاده می‌کنید، حتماً اطلاعات اعتباری را در مکان‌های مناسب درج کنید. بهتر است درباره جزئیات پلاتفرمتان با ارائه‌دهنده SoC خود مشورت کنید.

جایگزین کردن CD

  1. بااستفاده از xxd، نمایش نوشتاری محتوای فایل CD خود را استخراج کنید:

      $ xxd -i credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der
    

    برونداد نمونه:

      unsigned char credentials_test_certification_declaration_Chip_Test_CD_hexVendorId_hexProductId_der[] = {
        0x30, 0x81, 0xe9, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
        0x07, 0x02, 0xa0, 0x81, 0xdb, 0x30, 0x81, 0xd8, 0x02, 0x01, 0x03, 0x31,
        0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
        0x02, 0x01, 0x30, 0x45, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
        0x01, 0x07, 0x01, 0xa0, 0x38, 0x04, 0x36, 0x15, 0x24, 0x00, 0x01, 0x25,
        0x01, 0xfe, 0xca, 0x36, 0x02, 0x05, 0xce, 0xfa, 0x18, 0x25, 0x03, 0x34,
        0x12, 0x2c, 0x04, 0x13, 0x5a, 0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x31,
        0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x32, 0x34, 0x24,
        0x05, 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x00,
        0x18, 0x31, 0x7d, 0x30, 0x7b, 0x02, 0x01, 0x03, 0x80, 0x14, 0x62, 0xfa,
        0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a,
        0xdd, 0xf5, 0x04, 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86,
        0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a,
        0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x47, 0x30, 0x45, 0x02,
        0x20, 0x53, 0x25, 0x03, 0x2c, 0x96, 0x50, 0xb6, 0x64, 0xf4, 0x18, 0xbf,
        0x99, 0x47, 0xf8, 0x9d, 0xe6, 0xeb, 0x43, 0x94, 0xf1, 0xce, 0xb2, 0x61,
        0x00, 0xe0, 0xf9, 0x89, 0xa8, 0x71, 0x82, 0x02, 0x0a, 0x02, 0x21, 0x00,
        0xea, 0x0a, 0x40, 0xab, 0x87, 0xad, 0x7e, 0x25, 0xe1, 0xa1, 0x6c, 0xb1,
        0x12, 0xfa, 0x86, 0xfe, 0xea, 0x8a, 0xaf, 0x4b, 0xc1, 0xf3, 0x6f, 0x09,
        0x85, 0x46, 0x50, 0xb6, 0xd0, 0x55, 0x40, 0xe2
      };
      unsigned int credentials_test_certification_declaration_Chip_Test_CD_hexVendorId_hexProductId_der_len = 236;
      ```
    
  2. نوشتاری را که در مرحله قبلی استخراج کردید در فایلی که برای تعریف کردن CD در ساخت شما استفاده می‌شود کپی کنید. همانند PAI و DAC، نحوه انجام این کار به پلاتفرمی که در آن توسعه می‌دهید بستگی دارد.

اگر از نمونه‌های اطلاعات اعتباری استفاده می‌کنید، احتمالاً می‌خواهید محتوای kCdForAllExamples را در ExampleDACProvider::GetCertificationDeclaration، در src/credentials/examples/DeviceAttestationCredsExample.cpp جایگزین کنید:

    const uint8_t kCdForAllExamples[] = {
            0x30, 0x81, 0xe9, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
            0x07, 0x02, 0xa0, 0x81, 0xdb, 0x30, 0x81, 0xd8, 0x02, 0x01, 0x03, 0x31,
            0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
            0x02, 0x01, 0x30, 0x45, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
            0x01, 0x07, 0x01, 0xa0, 0x38, 0x04, 0x36, 0x15, 0x24, 0x00, 0x01, 0x25,
            0x01, 0xfe, 0xca, 0x36, 0x02, 0x05, 0xce, 0xfa, 0x18, 0x25, 0x03, 0x34,
            0x12, 0x2c, 0x04, 0x13, 0x5a, 0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x31,
            0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x32, 0x34, 0x24,
            0x05, 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x00,
            0x18, 0x31, 0x7d, 0x30, 0x7b, 0x02, 0x01, 0x03, 0x80, 0x14, 0x62, 0xfa,
            0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a,
            0xdd, 0xf5, 0x04, 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86,
            0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a,
            0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x47, 0x30, 0x45, 0x02,
            0x20, 0x53, 0x25, 0x03, 0x2c, 0x96, 0x50, 0xb6, 0x64, 0xf4, 0x18, 0xbf,
            0x99, 0x47, 0xf8, 0x9d, 0xe6, 0xeb, 0x43, 0x94, 0xf1, 0xce, 0xb2, 0x61,
            0x00, 0xe0, 0xf9, 0x89, 0xa8, 0x71, 0x82, 0x02, 0x0a, 0x02, 0x21, 0x00,
            0xea, 0x0a, 0x40, 0xab, 0x87, 0xad, 0x7e, 0x25, 0xe1, 0xa1, 0x6c, 0xb1,
            0x12, 0xfa, 0x86, 0xfe, 0xea, 0x8a, 0xaf, 0x4b, 0xc1, 0xf3, 0x6f, 0x09,
            0x85, 0x46, 0x50, 0xb6, 0xd0, 0x55, 0x40, 0xe2
        };

هدف را بسازید

بااستفاده از اطلاعات اعتباری تازه صادرشده‌تان، هدفتان را بسازید و آن را فلش کنید. این بخش به پلاتفرم بستگی دارد. برای اطلاعات بیشتر، به اسناد SoC یا دستگاه‌های پشتیبانی‌شده مراجعه کنید.

واگذار کردن دستگاه

اکنون می‌توانید مراحل قبلاً ذکرشده در جفت کردن دستگاه Matter را دنبال کنید تا دستگاه Matter را در Google Home platform آماده استفاده کنید.

اشکال‌زدایی کردن مشکلات بااستفاده از chip-tool

‫chip-tool می‌تواند ابزاری ارزشمند برای بررسی اینکه آیا دستگاهتان گواهینامه‌های صحیح را ارسال می‌کند یا نه باشد. برای ساختن آن:

$ cd examples/chip-tool
$ gn gen out/debug
Done. Made 114 targets from 112 files in 157ms
$ ninja -C out/debug
ninja: Entering directory `out/debug'
$ cd ../..

برای فعال کردن گزارش‌های اضافی، هرگاه chip-tool را اجرا می‌کنید، حتماً پرچم --trace_decode 1 را ارسال کنید. علاوه‌براین، بهتر است مسیر فایل PAA خود را با پرچم --paa-trust-store-path ارسال کنید.

بنابراین برای راه‌اندازی دستگاه Thread بااستفاده از BLE، می‌توانید این دستور را اجرا کنید:

```
$ examples/chip-tool/out/debug/chip-tool pairing ble-thread 1 \
  hex:Thread_credentials \
  pairing_code \
  discriminator \
  --paa-trust-store-path <path to PAA folder> \
  --trace_decode 1
```

در مورد دستگاه‌های آزمایشی، <PAIRING CODE> برابر با 20202021 و <DISCRIMINATOR> برابر با 3840 است.

برای دریافت اطلاعات اعتباری Thread از Google Nest Hub (2nd gen)، می‌توانید اجرا کنید:

$ adb connect border_router_ip_address
$ adb -e shell ot-ctl dataset active -x
$ adb disconnect

برای آماده‌سازی دستگاه Wi-Fi، می‌توانید از گزینه ble-wifi استفاده کنید:

$ examples/chip-tool/out/debug/chip-tool pairing ble-wifi 1 "SSID" SSID_password pairing_code discriminator