Как получить STATUS_AKE_SUCCESS в OTR
Я пытаюсь получить практический опыт работы с 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);
});
}
});