สร้างใบรับรองการทดสอบอุปกรณ์ Matter

สถานการณ์การพัฒนาบางอย่าง เช่น การทดสอบ OTA จำเป็นต้องสร้างใบรับรอง Matter ที่ไม่ใช่ใบรับรองการใช้งานจริง

ฟีเจอร์บางอย่างของระบบนิเวศของ Google รวมถึงการอัปเดตซอฟต์แวร์ OTA ของอุปกรณ์ ไม่สามารถดำเนินการได้โดยใช้ VID/PID สำหรับการทดสอบ

คู่มือนี้อธิบายวิธีสร้างและยืนยันใบรับรองที่ไม่ใช่ใบรับรองการใช้งานจริง Matter เพื่อใช้ในการทดสอบ โดยใบรับรองมีประเภทดังนี้

  1. ประกาศการรับรอง (CD)
  2. ใบรับรองระดับกลางสำหรับการรับรองผลิตภัณฑ์ (PAI)
  3. ใบรับรองการรับรองอุปกรณ์ (DAC)

ในระหว่างกระบวนการตั้งค่า อุปกรณ์ที่ได้รับการรับรอง Matter จะต้องรับรองตัวเอง นั่นคือพิสูจน์ว่า เป็นผลิตภัณฑ์ที่ได้รับการรับรอง Matter ของแท้ ข้อมูลเข้าสู่ระบบ ที่อุปกรณ์ Matter ใช้สำหรับการรับรอง ประกอบด้วยข้อมูลต่อไปนี้

  1. คู่คีย์การรับรอง
  2. เชนใบรับรอง

ใบรับรองการรับรองอุปกรณ์ (DAC) เป็นลิงก์แรกของเชนใบรับรอง และได้รับการตรวจสอบโดยใบรับรองระดับกลางสำหรับการรับรองผลิตภัณฑ์ (PAI) ซึ่งได้รับการตรวจสอบโดยหน่วยงานการรับรองผลิตภัณฑ์ (PAA) อีกต่อหนึ่ง

ระบบจะลงนามใบรับรองในเวลาเดียวกับที่สร้างคู่คีย์การรับรอง และลงนามโดยใช้คีย์ส่วนตัวของผู้ออกใบรับรองที่อยู่ระดับเหนือขึ้นไป 1 ระดับ ซึ่งจะสร้าง เชนความน่าเชื่อถือ ดังนั้น ใบรับรอง DAC จะได้รับการลงนามโดยคีย์ PAI และใบรับรอง PAI จะได้รับการลงนามโดยคีย์ PAA ใบรับรอง PAA จะเป็นแบบ Self-signed เนื่องจากเป็นใบรับรองระดับบนสุดของเชน เชนความน่าเชื่อถือนี้จะสร้างโครงสร้าง PAA แบบรวม ซึ่ง DCL (Distributed Compliance Ledger) จะซิงค์

ดูข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการรับรองและประกาศการรับรอง (CD) ได้ใน เอกสารและข้อความการรับรองเพิ่มเติม และในข้อกำหนด Matter

ติดตั้ง Matter SDK

คำแนะนำเหล่านี้ถือว่าคุณได้ติดตั้ง Matter SDK ที่ใช้งานได้แล้ว โปรดดูเอกสารประกอบใน Github หรือดู เริ่มต้นใช้งาน Matter เพื่อ ดูข้อมูลเพิ่มเติม

ติดตั้งยูทิลิตี hexdump 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

สร้าง CD

  1. สร้าง CD โดยใช้ chip-cert ปัจจุบัน Commissioner จะตรวจสอบเพียงว่า 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. ยืนยัน CD ตรวจสอบว่า CD มี 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 เป็นใบรับรองรูท เราจะใช้ใบรับรองนี้เป็น 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

คุณสามารถใช้กระบวนการที่คล้ายกันเพื่อสร้าง PAA แบบ Self-signed ได้ แต่ไม่จำเป็นต้องทำ

สิ่งที่เราทำที่นี่คือการใช้ PAA สำหรับการพัฒนาแบบ Self-signed ที่มีอยู่ซึ่งไม่มีข้อมูล 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 เกี่ยวกับข้อมูลจำเพาะของแพลตฟอร์ม

แทนที่ CD

  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