Этот проект содержит фрагменты кода Контакт Шилда внутри мобильных сервисов Huawei (HMS). Код в основном сосредоточен на: криптографии, работе BLE, анализе ключевых файлов и хранении данных. Проект также предоставляет пример кода, демонстрирующий, как заставить работать Contact Shield SDK с Google Exposure Notification.
Модуль криптографии описывает генерацию PeriodicKey, DynamicSharingCode (DSC) и SupplementaryData (SD). При запуске службы Контакт Шилд эти данные криптографии будут генерироваться вызовом ContactAdvBeaconGenerator.generate()
. Основные шаги процесса генерации следующие:
Получить PeriodicKey текущего дня. Обратите внимание, что у каждого приложения есть эксклюзивный набор PeriodicKey. Вызов PeriodicKeyGenerator.getPeriodicKey()
, чтобы получить PeriodicKey:
PeriodicKeyGenerator.cRNG()
, чтобы сгенерировать новый безопасный случайный массив в качестве ключа и сохранить ключ в базе данных. Затем верните вновь сгенерированный ключ.Генерация DSC зависит от DSC Key
и PaddedData
. Ключ DSC получается из PeriodicKey и генерируется вызовом DynamicSharingCode.getDscKey()
. PaddedData содержит интервал времени Epoch и генерируется вызовом DynamicSharingCode.generatePaddedData()
. После подготовки новый DSC будет сгенерирован вызовом EncryptDecrypt.aesEcbEncrypt()
, чтобы зашифровать PaddedData
ключом DSC. Таким образом, DSC является зашифрованным PaddedData
.
Чтобы сгенерировать SD, нам нужно подготовить DSC
(см. шаг 2 для генерации DSC), SD Key
и metadata
. В классе SupplementaryData
функция SupplementaryData.getSdKey()
используется для генерации ключа SD, который также получается из PeriodicKey для шифрования метаданных Bluetooth. Метаданные содержат формат пакета BLE и мощность передачи. Детали реализации метаданных можно найти в ContactAdvBeaconGenerator
. Наконец, будет вызван EncryptDecrypt.aesCtrEncrypt()
, чтобы создать новый SD.
Bluetooth Low Energy (BLE) — это базовый канал для обмена DSC с соседними устройствами. Связанный код сгруппирован вместе, чтобы показать, как Контакт Шилд управляет сканером и рекламодателем BLE. Формат рекламного пакета подробно описан в классе ContactBeacon
с методами pack()
и unpack()
, которые преобразуют между рекламным пакетом и ContactBeacon
. При вызове ContactManage.startContact()
Контакт Шилд запускается следующим образом:
Проверьте состояние Bluetooth. Убедитесь, что BLE поддерживается, и включите Bluetooth, если он в настоящее время отключён.
Запустите сканирование BLE вызовом ContactBleScanner.startBleScan()
, и настройте таймер сканера BLE
, который остановит сканирование через 4 секунды. Детали реализации сканера BLE можно найти в ContactBleScanner
. Этот класс вызовет ContactBeacon.unpack()
, когда будет найдена реклама Контакт Шилд, и передаст только что найденный ContactBeacon
в ContactManager
. Затем ContactManager
сохраняет данные DSC/SD
ContactBeacon
, а также RSSI в кэш.
Запустите рекламу BLE. Сначала вызовите ContactAdvBeaconGenerator.generate()
, чтобы сгенерировать ContactBeacon
, который объединяет данные DSC
(соответствующие текущему интервалу времени Epoch) и данные SD
(зашифрованные метаданные Bluetooth). Затем передайте маяк в ContactBleAdvertiser.startBleAdv()
. Детали реализации рекламодателя BLE можно найти в ContactBleAdvertier
.
Когда таймер сканера BLE
истечёт, остановите сканирование BLE и сбросьте все отсканированные данные из кэша в базу данных вызовом ContactDataManage.flushScanDataToDb()
. Затем настройте тревогу Контакт Шилд
, чтобы снова запустить сканирование BLE через 3–4 минуты.
Каждый раз, когда срабатывает тревога Контакт Шилд
, мы запускаем сканер BLE на 4 секунды, как описано выше. В то же время мы...
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )