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

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

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

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

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. يتحقّق المُفوّض حاليًا فقط من صحة البيانات. أن يتطابق معرف VID مع البيانات التي تم الكشف عنها في مكان آخر بواسطة الجهاز: مجموعة المعلومات الأساسية وأصل 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، ولكن إغفالها يمنحك مزيدًا من المرونة اختبار الفرضية. إذا كنت بحاجة إلى 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) الموقعة ذاتيًا لا يتضمن معلومات VID.

لمزيد من الأمثلة حول إنشاء قرص مضغوط، انظر credentials/test/gen-test-cds.sh للاطّلاع على مزيد من الأمثلة حول إنشاء عناوين URL لكل من "حملات التطبيقات لجذب المستخدمين الحاليين" و"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. مصنع البيانات، بينما يتم تضمين القرص المضغوط في البرامج الثابتة نفسها.

    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 على 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