إنشاء شهادات اختبار جهاز 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) في مستندات ورسائل المصادقة الإضافية وفي "مواصفات المسألة القانونية".

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

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

تثبيت الأداة المساعدة Hexdump xxd إذا لم تكن متوفرة لديك. وهذه الأداة مفيدة لطباعة بيانات الاعتماد بتنسيق النمط C:

sudo apt-get install xxd

الإصدار chip-cert

  1. تأكّد من استخدام إصدار حديث من حزمة تطوير البرامج (SDK). تم اختبار هذه الإجراءات على 0b17bce8 SHA من GitHub، في فرع 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. في الوقت الحالي، يتحقّق المفوّض فقط من تطابُق معرّف 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

في هذا المثال، سنستخدم شهادة هيئة مصادقة المنتج (PAA) التجريبية الخاصة بـ Matter ومفتاح التوقيع Chip-Test-PAA-NoVID كشهادة الجذر لدينا. سنستخدمه كمرجع CA الجذر لإنشاء 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)

يمكن استخدام عملية مماثلة لإنشاء اتفاقية شراكة أعمال موقعة ذاتيًا، ولكن ليس من الضروري إجراء ذلك.

بدلاً من ذلك، ما أنجزناه في هذه الحالة هو استخدام عرض أسعار تقديري حالي للتطوير موقَّع ذاتيًا ولا يتضمّن معلومات VID.

للاطّلاع على مزيد من الأمثلة حول إنشاء قرص مضغوط، اطّلِع على المعلومات التالية: 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/\/,/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 في بيانات المصنع، بينما يكون القرص المضغوط مضمَّنًا في البرامج الثابتة نفسها.

    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. يمكنك استخراج تمثيل نصي لمحتويات ملف القرص المضغوط باستخدام 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. انسخ النص الذي استخرجته في الخطوة السابقة إلى الملف المستخدَم لتحديد القرص المضغوط في إصدارك. وكما هو الحال مع 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