Werbesignal des Anbieters

Werbung: wenn sichtbar

Wenn das Gerät des Anbieters für BR/EDR sichtbar ist (d. h. im Kopplungsmodus), wird es wird Modell-ID-Daten für schnelles Pairing über BLE bewerben. Die BLE-Adresse darf keine gedreht werden soll.

Werbeintervall: wenn sichtbar

Das Intervall zwischen den Anzeigen sollte nicht größer als 100 ms (10 Hz) sein. A kann der Seeker den Dienstleister schnell finden, auch wenn er Energiesparmodus.

Werbenutzlast: Modell-ID-Daten für schnelles Pairing

Die Anzeige muss den Dienstdaten-Datentyp ebd. enthalten, § 1.11. Die Die UUID ist die UUID des Dienstes für schnelles Pairing von 0xFE2C. Die Dienstdaten müssen Folgendes enthalten:

Oktett Datentyp Beschreibung Wert
0–2 uint24 24-Bit-Modell-ID variiert

Werbung: wenn nicht sichtbar

Wenn das Gerät des Anbieters nicht sichtbar ist (d. h. nicht im Kopplungsmodus) Werben Sie für Kontodaten über die Funktion „Schnelles Pairing“. Beachten Sie dabei die folgenden Richtlinien.

Durch das Bewerben der Kontodaten können Interessenten in der Nähe erkennen, wenn ein Anbieter die zum Konto gehören, und starten die Kopplung, ohne wieder in den Kopplungsmodus zurück. Sucher geben Nutzern die Möglichkeit, für den Fall, dass sie nicht auf die Kopplung mit dem Anbieter oder Die Übertragung ist nicht relevant (z. B. wenn sie bereits gekoppelt sind). Außerdem werden offensichtlich schlechte Übertragungen automatisch herausgefiltert, z. B. wenn die Kontodaten falsch konfiguriert sind.

Werbeintervall: wenn nicht sichtbar

Das Intervall zwischen den Anzeigen sollte höchstens 250 ms (4 Hz) betragen.

Werbenutzlast: Kontodaten über schnelles Pairing

Die Anzeige muss den Dienstdaten-Datentyp Ebd., § 1.11. Die Die UUID ist die UUID des Dienstes für schnelles Pairing von 0xFE2C. Die Dienstdaten müssen Folgendes enthalten:

Oktett Datentyp Beschreibung Wert
0 uint8 Version und Flags
0bVVVVFFFF
  • V = Version
  • F = Flags
0x00
(für zukünftige Verwendung reserviert)
1 – variiert Kontoschlüsseldaten variiert
oder 0x00, wenn die Kontoschlüsselliste leer ist

Die Kontoschlüsseldaten enthalten Folgendes:

Oktett Datentyp Beschreibung Wert
0 uint8 Feldlänge und Typ
0bLLLLTTTT
  • L = Länge des Kontoschlüsselfilters in Byte
  • T = Typ
0bLLLL0000
  • length = 0bLLLL = variiert
  • type = 0b0000 (UI-Anzeige anzeigen) oder 0b0010 (UI-Anzeige ausblenden), Kontoschlüsselfilter
1 – s Filter für Kontoschlüssel variiert
s + 1 uint8 Feldlänge und Typ
0bLLLLTTTT
  • L = Länge in Byte
  • T = Typ
0b00100001
  • length = 0b0010 = 2
  • Typ = 0b0001, Salt
s + 2 – s + 3 uint16 Salt variiert

Filter für Kontoschlüssel

Mit dem beworbenen Kontoschlüsselfilter kann ein Sucher schnell überprüfen, Der Anbieter besitzt möglicherweise einen bestimmten Kontoschlüssel (mit einer geringen Anzahl falsch positiver Ergebnisse). durchschnittlich viel weniger als 0,5%) vor weiteren Interaktionen. Die Der Sucher kann automatisch eine Verbindung herstellen und versuchen, den Vorgang zu starten, wenn er Folgendes erkennt: Ein Filter vom Typ 0, der die Benutzeroberfläche anzeigt, einen seiner Kontoschlüssel enthält, um die Rate der Falschmeldungen positive Ergebnisse weiter. In einigen Fällen möchte der Dienstleister erkannt werden, aber noch nicht zum Koppeln bereit sind. Ein Beispiel ist, dass, wenn Buds Wir möchten, dass die nachfolgende Benachrichtigung zur Kopplung nicht mehr angezeigt wird. da das Koppeln vom Headset abgelehnt werden kann.

Der Kontoschlüsselfilter hat eine variable Länge Bloom-Filter wird folgendermaßen aufgebaut: folgt:

  1. Lassen Sie n die Anzahl der Kontoschlüssel (n >= 1) im Liste der Kontoschlüssel.
  2. Lassen Sie s, die Größe des Filters in Byte, durch (1,2*n + 3) gekürzt. Für Wenn beispielsweise 1 Schlüssel persistent ist, gilt: s = 4 Byte.
    uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3);
  3. Initialisieren Sie den Filter F als Array aus s Byte, die jeweils auf 0 gesetzt sind.
    uint8_t F[s] = {0};
  4. Führen Sie für jeden Kontoschlüssel K in der beibehaltenen Liste der Kontoschlüssel folgende Schritte aus:
    a) Lassen Sie V concat(K, Salt) sein.

    // In the sample code, the size of salt is 2 bytes.
    #define SALT_SIZE 2
    
    uint8_t V[FASTPAIR_ACCOUNT_KEY_SIZE + SALT_SIZE];
    for (uint8_t keyIndex = 0; keyIndex < n; keyIndex++)
      {
         // concat (K, Salt)
          fastpair_get_account_key_by_index(keyIndex, V);
    
          uint8_t randomSalt = (uint8_t)rand();
          V[FASTPAIR_ACCOUNT_KEY_SIZE] = randomSalt;
          ... }
    

    b. Sie hashen V mit SHA256. Sie erhalten einen 32-Byte-Wert H = {H0, ..., H31}.

    uint8_t H[32] = {0};
    SHA256_hash_function(V, H);
    

    c. Teilen Sie H in acht 4-Byte-Ganzzahlen ohne Vorzeichen in Big-Endian, X = {X0, ..., X7}, wobei X0 = 0 × H0H1H2H3.

         uint32_t X[8];
         for (index = 0; index < 8; index++)
         {
            X[index] = (((uint32_t)(H[index * 4])) << 24) |
                        (((uint32_t)(H[index * 4 + 1])) << 16) |
                        (((uint32_t)(H[index * 4 + 2])) << 8) |
                        (((uint32_t)(H[index * 4 + 3])) << 0);
         }
    

    d. Für jedes Xi:
    i) Lass M Xi-Modulo für die Anzahl der Bits im Filter sein, (s * 8)
    ii. Ruft das Byte in F bei Index (M / 8) ab, abgerundet.
    iii. Setzen Sie im Byte das Bit bei Index (M % 8) auf 1.
    iv. Mit anderen Worten:

        // M = Xi % (s * 8)
        // F[M/8] = F[M/8] | (1 << (M % 8))
        for (index = 0; index < 8; index++)
        {
            uint32_t M    = X[index] % (s * 8);
            F[M / 8] = F[M / 8] | (1 << (M % 8));
        }
    

Fügen Sie den Filter F als Filterfeld für den Kontoschlüssel in die Werbedaten ein. Hinweis: Es gibt keine Endianness. auf diesen Wert anwenden, da nicht mehr oder weniger Byte-Reihenfolge – ändern Sie nicht die Byte-Reihenfolge.

Salzfeld

Der Salt ist ein zufälliger Wert, der beim Erstellen des Bloom-Filter. Dieser Salt sollte jedes Mal neu generiert werden, wenn der RPA für den Anbieter, um ein Tracking über die Adressrotation hinweg zu vermeiden.

So generieren Sie den Kontoschlüsselfilter mit dem Salt:

  1. Generiere ein zufälliges 2-Byte-S. Hinweis: Es gibt keine Endianness. zu diesem -Wert, da es kein mehr oder weniger wichtiges Byte gibt – ändern Sie das Byte nicht Reihenfolge.
  2. Verwenden Sie das 2-Byte-S als Salt.
  3. Fügen Sie in den beworbenen Konten für die Funktion „Schnelles Pairing“ den generierten Filter in die Account Key Filter (Kontoschlüsselfilter) und S im Salt-Feld.