1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/hms-core-hms-nearby-contactshield-internals

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
4 лет назад
4 лет назад
4 лет назад
4 лет назад
3 месяцев назад
4 лет назад
4 лет назад
4 лет назад
4 лет назад
4 лет назад
4 лет назад
Loading...
README.md

Контакт Шилд

Этот проект содержит фрагменты кода Контакт Шилда внутри мобильных сервисов Huawei (HMS). Код в основном сосредоточен на: криптографии, работе BLE, анализе ключевых файлов и хранении данных. Проект также предоставляет пример кода, демонстрирующий, как заставить работать Contact Shield SDK с Google Exposure Notification.

Криптография

Модуль криптографии описывает генерацию PeriodicKey, DynamicSharingCode (DSC) и SupplementaryData (SD). При запуске службы Контакт Шилд эти данные криптографии будут генерироваться вызовом ContactAdvBeaconGenerator.generate(). Основные шаги процесса генерации следующие:

  1. Получить PeriodicKey текущего дня. Обратите внимание, что у каждого приложения есть эксклюзивный набор PeriodicKey. Вызов PeriodicKeyGenerator.getPeriodicKey(), чтобы получить PeriodicKey:

    • Если PeriodicKey текущего дня присутствует в базе данных, эта функция вернёт копию.
    • В противном случае вызовите PeriodicKeyGenerator.cRNG(), чтобы сгенерировать новый безопасный случайный массив в качестве ключа и сохранить ключ в базе данных. Затем верните вновь сгенерированный ключ.
  2. Генерация DSC зависит от DSC Key и PaddedData. Ключ DSC получается из PeriodicKey и генерируется вызовом DynamicSharingCode.getDscKey(). PaddedData содержит интервал времени Epoch и генерируется вызовом DynamicSharingCode.generatePaddedData(). После подготовки новый DSC будет сгенерирован вызовом EncryptDecrypt.aesEcbEncrypt(), чтобы зашифровать PaddedData ключом DSC. Таким образом, DSC является зашифрованным PaddedData.

  3. Чтобы сгенерировать SD, нам нужно подготовить DSC (см. шаг 2 для генерации DSC), SD Key и metadata. В классе SupplementaryData функция SupplementaryData.getSdKey() используется для генерации ключа SD, который также получается из PeriodicKey для шифрования метаданных Bluetooth. Метаданные содержат формат пакета BLE и мощность передачи. Детали реализации метаданных можно найти в ContactAdvBeaconGenerator. Наконец, будет вызван EncryptDecrypt.aesCtrEncrypt(), чтобы создать новый SD.

Работа BLE

Bluetooth Low Energy (BLE) — это базовый канал для обмена DSC с соседними устройствами. Связанный код сгруппирован вместе, чтобы показать, как Контакт Шилд управляет сканером и рекламодателем BLE. Формат рекламного пакета подробно описан в классе ContactBeacon с методами pack() и unpack(), которые преобразуют между рекламным пакетом и ContactBeacon. При вызове ContactManage.startContact() Контакт Шилд запускается следующим образом:

  1. Проверьте состояние Bluetooth. Убедитесь, что BLE поддерживается, и включите Bluetooth, если он в настоящее время отключён.

  2. Запустите сканирование BLE вызовом ContactBleScanner.startBleScan(), и настройте таймер сканера BLE, который остановит сканирование через 4 секунды. Детали реализации сканера BLE можно найти в ContactBleScanner. Этот класс вызовет ContactBeacon.unpack(), когда будет найдена реклама Контакт Шилд, и передаст только что найденный ContactBeacon в ContactManager. Затем ContactManager сохраняет данные DSC/SD ContactBeacon, а также RSSI в кэш.

  3. Запустите рекламу BLE. Сначала вызовите ContactAdvBeaconGenerator.generate(), чтобы сгенерировать ContactBeacon, который объединяет данные DSC (соответствующие текущему интервалу времени Epoch) и данные SD (зашифрованные метаданные Bluetooth). Затем передайте маяк в ContactBleAdvertiser.startBleAdv(). Детали реализации рекламодателя BLE можно найти в ContactBleAdvertier.

  4. Когда таймер сканера BLE истечёт, остановите сканирование BLE и сбросьте все отсканированные данные из кэша в базу данных вызовом ContactDataManage.flushScanDataToDb(). Затем настройте тревогу Контакт Шилд, чтобы снова запустить сканирование BLE через 3–4 минуты.

  5. Каждый раз, когда срабатывает тревога Контакт Шилд, мы запускаем сканер BLE на 4 секунды, как описано выше. В то же время мы...

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Расширить Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники (4)

все

Недавние действия

Создан репозиторий 3 месяца назад
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/hms-core-hms-nearby-contactshield-internals.git
git@gitlife.ru:oschina-mirror/hms-core-hms-nearby-contactshield-internals.git
oschina-mirror
hms-core-hms-nearby-contactshield-internals
hms-core-hms-nearby-contactshield-internals
master