Signal publicitaire du fournisseur
Publicité: lorsqu'elle est visible
Lorsque l'appareil du fournisseur est visible pour les appareils BR/EDR (c'est-à-dire en mode association), il doit annoncer les données d'ID de modèle à Association express via une connexion BLE, et l'adresse BLE ne doit pas faire pivoter l'écran.
Intervalle publicitaire: si visible
L'intervalle entre les annonces ne doit pas dépasser 100 ms (10 Hz). A Le débit rapide permet au demandeur de trouver rapidement le fournisseur, même lorsqu'il recherche dans mode économie d'énergie.
Charge utile publicitaire: données d'ID de modèle avec Association express
L'annonce doit contenir le type de données des Données des Services, ibid., § 1.11. La
L'UUID doit être l'UUID du service d'association express de 0xFE2C
. Les données du service
contiennent les éléments suivants:
Octet | Type de données | Description | Valeur |
---|---|---|---|
0-2 | uint24 |
ID de modèle 24 bits | varie |
Publicité: lorsqu'elle n'est pas visible
S'il n'est pas visible (autrement dit, en mode association), l'appareil du Fournisseur doit : pour diffuser des données de compte Association express, en respectant les consignes ci-dessous.
Faire la promotion des données du compte permet aux internautes à proximité de savoir quand un fournisseur appartenant à son compte et lancer l'association sans avoir à forcer repassent d'abord en mode association, ce qui est une cause fréquente une plainte. Les utilisateurs auront la possibilité d'ignorer cette annonce s'il n'attend pas d'être associé au fournisseur l'annonce n'est pas pertinente (par exemple, s'ils ont déjà couplé). Ils excluent également automatiquement les annonces manifestement mauvaises, telles que lorsque les données du compte sont mal configurées.
Intervalle publicitaire: lorsqu'il n'est pas visible
L'intervalle entre les annonces ne doit pas dépasser 250 ms (4 Hz).
Charge utile publicitaire: données de compte Association express
L'annonce doit contenir le type de données des Données des Services, Ibid., § 1.11. La
L'UUID doit être l'UUID du service d'association express de 0xFE2C
. Les données du service
contiennent les éléments suivants:
Octet | Type de données | Description | Valeur |
---|---|---|---|
0 | uint8 |
Version et options 0bVVVVFFFF
|
0x00 (réservé à une utilisation ultérieure) |
1 - varie | Données de la clé du compte | varie ou 0x00 si la liste des clés de compte est vide |
Les données de la clé de compte contiennent les éléments suivants:
Octet | Type de données | Description | Valeur |
---|---|---|---|
0 | uint8 |
Longueur et type de champ 0bLLLLTTTT
|
0 bLL0000
|
1 - s | Filtre de clé de compte | varie | |
s + 1 | uint8 |
Longueur et type de champ 0bLLLLTTTT
|
0b00100001
|
s + 2 - s + 3 | uint16 |
Salt | varie |
Filtre de clé de compte
Le filtre de clé de compte annoncé permet à un demandeur de vérifier rapidement si un Le fournisseur peut posséder une certaine clé de compte (avec un faible taux de faux positifs moyenne, nettement inférieure à 0,5%), avant d'autres interactions. La L'appli peut se connecter automatiquement et tenter de lancer la procédure un filtre diffusé de type 0, c'est-à-dire qui affiche une indication d'interface utilisateur, que peut contenir l'une de ses clés de compte, de façon à réduire le taux de fausses les points positifs. Dans certains cas, le fournisseur peut vouloir être reconnu par l'utilisateur lorsque vous n'êtes pas prêt pour l'association. Par exemple, lorsque les écouteurs sont mis nous voulons arrêter d'afficher la notification d'association suivante car cette association pourrait être refusée par le casque.
Le filtre de clé de compte est un filtre Filtre Fleur construit comme ce qui suit:
- Soit n le nombre de clés de compte (n >= 1) dans la table Liste des clés de compte :
- Soit s, qui correspond à la taille du filtre en octets, soit (1,2*n + 3) tronqué. Pour
exemple, si une clé est persistante, s = 4 octets.
uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3);
- Initialisez le filtre F en tant que tableau de s octets, chacun étant défini sur 0.
uint8_t F[s] = {0};
Pour chaque clé de compte K dans la liste de clés de compte persistante:
a. Soit V concat(K, Salt).// 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. Hachage V à l'aide de SHA256, obtention d'une valeur de 32 octets H = {H0, ..., H31}.
uint8_t H[32] = {0}; SHA256_hash_function(V, H);
c. Divisez H en huit entiers non signés de 4 octets en big-endian. X = {X0, ..., X7}, où X0 = 0xH0H1H2H3.
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. Pour chaque Xi:
i. Soit M Xi modulo le nombre de bits du filtre, (s x 8).
ii. Obtenez l'octet dans F au niveau de l'index (M / 8), arrondi au chiffre inférieur.
iii. Dans l'octet, définissez le bit au niveau de l'index (M % 8) sur 1.
iv. En d'autres termes:// 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)); }
Incluez le filtre F en tant que champ de filtre de clé de compte dans les données publicitaires. Notez qu'il n'existe pas de "endianness" à cette valeur, puisqu'il n'y a plus ou moins octet important (ne modifiez pas l'ordre des octets).
Champ de sel
Le salage est une valeur aléatoire qui est ajoutée aux clés de compte lors de la création du fleur. Ce salage doit être régénéré à chaque fois que le RPA est mis à jour pour au Fournisseur pour éviter le suivi de la rotation des adresses.
Pour générer le filtre de clé de compte à l'aide du salage:
- Générez un S aléatoire de 2 octets. Notez qu'il n'existe pas de "endianness" à ce , puisqu'il n'y a plus ou moins d'octets significatifs. Ne modifiez pas l'octet. commande.
- Utilisez le S de 2 octets comme valeur de sel.
- Dans les données du compte pour l'Association express annoncées, incluez le filtre généré dans le champ de filtre de clé de compte et S dans le champ Salt.