إنشاء شهادات اختبار جهاز Matter

تتطلّب بعض سيناريوهات التطوير، مثل اختبار OTA، إنشاء شهادات Matter غير مخصّصة للإصدار.

بعض ميزات منظومة Google المتكاملة، بما في ذلك تحديثات البرامج عبر الهواء (OTA) على الأجهزة، لا يمكن تنفيذها باستخدام رقم تعريف المورّد/رقم تعريف المنتج التجريبي.

يشرح هذا الدليل كيفية إنشاء شهادات Matter غير إنتاجية والتحقّق منها لاستخدامها في الاختبار. أنواع الشهادات هي:

  1. إقرار الشهادة (CD)
  2. شهادة وسيطة لتصديق المنتج (PAI)
  3. شهادة مصادقة الجهاز (DAC)

أثناء عملية التشغيل، يجب أن يُثبت الجهاز المعتمَد من Matter أنه منتج أصلي معتمَد من Matter. تتكوّن بيانات الاعتماد التي تستخدمها أجهزة Matter للمصادقة من:

  1. مفتاحا تشفير للمصادقة
  2. سلسلة شهادات

شهادة مصادقة الجهاز (DAC) هي الرابط الأول في سلسلة الشهادات، ويتم التحقّق من صحتها من خلال شهادة مصادقة المنتج الوسيطة (PAI)، والتي يتم التحقّق من صحتها بدورها من خلال هيئة مصادقة المنتج (PAA).

يتم توقيع الشهادات في الوقت نفسه الذي يتم فيه إنشاء مفتاحَي التشفير الخاصَّين بالمصادقة، ويتم توقيعهما باستخدام المفتاح الخاص لهيئة إصدار الشهادات في المستوى الأعلى، ما يشكّل سلسلة ثقة. وبالتالي، يتم توقيع شهادة DAC باستخدام مفتاح PAI، ويتم توقيع شهادة PAI باستخدام مفتاح PAA. بما أنّ شهادات PAA هي في أعلى السلسلة، فهي موقَّعة ذاتيًا. تشكّل سلسلة الثقة هذه بنية موحّدة لشهادات PAA، وتتم مزامنتها من خلال "دفتر الأستاذ الموزَّع للامتثال" (DCL).

يمكنك الاطّلاع على مزيد من المعلومات حول عملية المصادقة وإقرارات الشهادات (CD) في المستندات والرسائل الإضافية الخاصة بالمصادقة وفي مواصفات Matter.

تثبيت حزمة تطوير البرامج (SDK) الخاصة ببروتوكول Matter

تفترض هذه التعليمات أنّك ثبّت حزمة تطوير البرامج (SDK) لـ Matter بشكل صحيح. يُرجى الرجوع إلى مستندات Matter على Github أو الاطّلاع على مقالة بدء استخدام Matter للحصول على مزيد من المعلومات.

ثبِّت الأداة المساعدة hexdump xxd إذا لم تكن لديك. هذه الأداة مفيدة لطباعة بيانات الاعتماد بتنسيق C-style:

sudo apt-get install xxd

إنشاء chip-cert

  1. تأكَّد من استخدام إصدار حديث من حزمة تطوير البرامج (SDK). تم اختبار هذه الإجراءات على 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. أنشئ مستند الإفصاح الختامي باستخدام chip-cert. في الوقت الحالي، يتحقّق المفوّض فقط من تطابق رقم تعريف المورّد ورقم تعريف المنتج مع البيانات التي يعرضها الجهاز في مكان آخر: مجموعة المعلومات الأساسية وشهادة مصادقة الجهاز (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. تحقَّق من القرص المضغوط. تأكَّد من أنّه يحتوي على رقم تعريف المورّد/رقم تعريف المنتج (بالتنسيق العشري):

    $ 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

في هذا المثال، سنستخدم شهادة "هيئة مصادقة المنتج" (PAA) الاختبارية الخاصة بـ "Matter" ومفتاح التوقيع "Chip-Test-PAA-NoVID" كشهادة الجذر. سنستخدمه كمرجع تصديق جذري لإنشاء شهادة PAI وشهادة DAC الخاصتين بنا.

  1. أنشئ معرّف PAI باستخدام معرّف PAA. يمكنك تضمين معلومات PID في PAI بشكل اختياري، ولكن حذفها يمنحك مزيدًا من المرونة في الاختبار. إذا كنت بحاجة إلى شهادات DAC لمعرّفات PID إضافية، يمكنك تنفيذ خطوة إنشاء شهادة DAC فقط:

    $ 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. إذا لم تكن تستخدم "بيانات المصنع" بعد، ننصحك بوضع معرّف PAI في 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 بشأن تفاصيل نظامك الأساسي.

استبدال القرص المضغوط

  1. استخرِج تمثيلاً نصيًا لمحتوى ملف CD باستخدام xxd:

      $ 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 ../..

لتفعيل السجلّات الإضافية، تأكَّد من تمرير العلامة --trace_decode 1 عند تشغيل chip-tool. بالإضافة إلى ذلك، من الممارسات الجيدة تمرير مسار ملف 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