Как получить STATUS_AKE_SUCCESS в OTR - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь получить практический опыт работы с OTR в Javascript. Для этого я использую Github Javascript OTR от arlolra .

У меня есть рабочий прототип для обмена незашифрованными сообщениями, с OTR по умолчанию шифрование отключено. Исходя из этого, я полагаю, что неправильно понимаю обмен ключами и, следовательно, не могу после этого обмениваться зашифрованными сообщениями.

Функция switch / case возвращает OTR.CONST.STATUS_SEND_QUERY // 0 на стороне отправителя и OTR.CONST.STATUS_AKE_INIT // 1 на стороне получателя.

Но состояние никогда не меняется на OTR.CONST.STATUS_AKE_SUCCESS.

Как правильно переключиться на OTR.CONST.STATUS_AKE_SUCCESS и отправлять зашифрованные сообщения после этого?

На стороне отправителей: Создайте сообщение инициализации для шифрования OTR

otrClient.sendQueryMsg();

Отправить сообщение через клиента на другую сторону

// send query the message over otr
otrClient.on('io', function(msg, meta) {
var message = {
  type: 'chat',
  body: msg,
  extension: {
    save_to_history: 1,
    dialog_id: conversationId
  },
  markable: 1
 };

  // third party sending;
});

На стороне приемников:

Получение сообщения от слушателя, предоставленного третьей стороной.

// MessageListener for OTR
  Thirdparty.chat.onMessageListener = function(userId, message) {
  otrClient.receiveMsg(message.body);
  console.log('userId ' + userId);
  console.log('messageobject');
  console.log(message);

  callOTRState();
 };

OTR-клиент, обрабатывающий сообщение

// Receiver reading message
otrClient.on('ui', function(msg, encrypted, meta) {

console.log('callback called');
console.log('msg: ' + msg);
console.log('encrypted: ' + encrypted);
console.log('meta: ' + meta);

callOTRState();
});

Функция отслеживания статуса состояния обмена ключами:

// querying OTR status
function callOTRState() {
  otrClient.on('status', function(state) {
   switch (state) {
     case OTR.CONST.STATUS_SEND_QUERY:
     // status send query
        console.log('OTR.CONST.STATUS_SEND_QUERY // 0');
    break;
  case OTR.CONST.STATUS_AKE_INIT:
    // status OTR.CONST.STATUS_AKE_INIT
    console.log('OTR.CONST.STATUS_AKE_INIT // 1');
    break;
  case OTR.CONST.STATUS_AKE_SUCCESS:
    // sucessfully ake'd with buddy
    console.log('OTR.CONST.STATUS_AKE_SUCCESS // 2');
    // check if buddy.msgstate === OTR.CONST.MSGSTATE_ENCRYPTED
   // Send here a message saying hello
 sendNewMessage();
    break;
  case OTR.CONST.STATUS_END_OTR:
    // if buddy.msgstate === OTR.CONST.MSGSTATE_FINISHED
    // inform the user that his correspondent has closed his end
    // of the private connection and the user should do the same
  console.log('OTR.CONST.STATUS_END_OTR // 3');
  break;
}
});
}

Функция отправки сообщения после включения OTR-шифрования.

//send new message
  function sendNewMessage() {
 otrClient.sendMsg('Hello?');
otrClient.on('io', function(msg, meta) {
  var message2 = {
    type: 'chat',
    body: msg
  };

  Thirdparty.send(idChattee, message2);
  });
}
});
...