Espruino:Справочник по API/Класс NRF/setSecurity()

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Функция NRF.setSecurity()[1]

Синтаксис

NRF.setSecurity(options)

Параметры

  • options – объект, содержащий настройки безопасности (см. ниже)

Возвращаемое значение

Описание

Задает настройки безопасности, которые используются при подключении/сопряжении. Они применяются и в режиме центрального, и в режиме периферийного устройства.

NRF.setSecurity({
  display : bool  // здесь задается, будет ли пароль,
                  // отправленный в событии `BluetoothDevice.passkey`
                  // показан на дисплее устройства
                  // (значение по умолчанию – «false»)
  keyboard : bool // здесь задается, можно ли на этом устройстве
                  // ввести пароль, запрошенный с помощью события
                  // `BluetoothDevice.passkeyRequest`
                  // (значение по умолчанию – «false»)
  bond : bool // выполнять ли сопряжение (по умолчанию «true»)
  mitm : bool // защиты от атаки посредника (по умолчанию «false») 
  lesc : bool // используется ли LE Secure Connections
              // (по умолчанию «false»)
  passkey :   // 6-циферный пароль (по умолчанию "")
  oob : [0..15] // если эта настройка будет задана, это включит
                // внеполосное (out-of-band или OOB) сопряжение,      
                // где будет использован заданный здесь 16-байтный код
});

Примечание: Некоторые комбинации аргументов могут выдать ошибку. Например, нельзя задать пароль и при этом не задать display:1. Настройку display:1 можно задать и не имея, собственно, самого дисплея – пользователю просто нужно знать ваш пароль.

Например, запросить сопряжение и задать пароль можно вот так:

NRF.setSecurity({passkey:"123456", mitm:1, display:1});

Хотя большинство устройств на этом этапе запрашивают пароль для сопряжения, вы по-прежнему можете подключиться к устройству и без него (например, при помощи приложения nRF Connect).

С помощью пароля можно защитить все характеристики, заданные с помощью функции NRF.setServices(). Например, код ниже потребует ввести пароль 123456 перед чтением характеристики 9d020002-bf5f-1d1a-b52a-fe52091d5b12.

NRF.setSecurity({passkey:"123456", mitm:1, display:1});
NRF.setServices({
  "9d020001-bf5f-1d1a-b52a-fe52091d5b12" : {
    "9d020002-bf5f-1d1a-b52a-fe52091d5b12" : {
      // можно прочесть всегда:
      value : "Не секрет"
    },
    "9d020003-bf5f-1d1a-b52a-fe52091d5b12" : {
      // можно прочесть только после сопряжения:
      value : "Секрет",
      readable : true,
      security: {
        read: {
          mitm: true,
          encrypted: true
        }
      }
    },
    "9d020004-bf5f-1d1a-b52a-fe52091d5b12" : {
      // можно прочесть всегда,
      // записать можно только после сопряжения:
      value : "Можно прочесть",
      readable : true,
      writable : true,
      onWrite : function(evt) {
        console.log("Данные записаны ", evt.data);
      },
      security: {
        write: {
          mitm: true,
          encrypted: true
        }
      }
    }
  }
});

Примечание: Если заданы настройки passkey и oob, в сервисе Nordic UART (если он включен) будет автоматически включено шифрование. В противном случае он будет открыт.

Примечание: Эта функция доступна только для NRF52-устройств (вроде Puck.js, Pixl.js, Bangle.js и MDBT42Q).

Примеры

См.также

Внешние ссылки