diff options
Diffstat (limited to 'src/MSEHandshake.cc')
| -rw-r--r-- | src/MSEHandshake.cc | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/MSEHandshake.cc b/src/MSEHandshake.cc index c4d3c98a..3b3f67fc 100644 --- a/src/MSEHandshake.cc +++ b/src/MSEHandshake.cc @@ -284,7 +284,8 @@ void MSEHandshake::sendInitiatorStep2() ptr += sizeof(VC); // crypto_provide memset(ptr, 0, CRYPTO_BITFIELD_LENGTH); - if(option_->get(PREF_BT_MIN_CRYPTO_LEVEL) == V_PLAIN) { + if(!option_->getAsBool(PREF_BT_FORCE_ENCRYPTION) && + option_->get(PREF_BT_MIN_CRYPTO_LEVEL) == V_PLAIN) { ptr[3] = CRYPTO_PLAIN_TEXT; } ptr[3] |= CRYPTO_ARC4; @@ -347,7 +348,8 @@ bool MSEHandshake::receiveInitiatorCryptoSelectAndPadDLength() //verifyCryptoSelect unsigned char* rbufptr = rbuf_; decryptor_->encrypt(CRYPTO_BITFIELD_LENGTH, rbufptr, rbufptr); - if(rbufptr[3]&CRYPTO_PLAIN_TEXT && + if((rbufptr[3]&CRYPTO_PLAIN_TEXT) && + !option_->getAsBool(PREF_BT_FORCE_ENCRYPTION) && option_->get(PREF_BT_MIN_CRYPTO_LEVEL) == V_PLAIN) { A2_LOG_DEBUG(fmt("CUID#%" PRId64 " - peer prefers plaintext.", cuid_)); @@ -447,7 +449,8 @@ bool MSEHandshake::receiveReceiverHashAndPadCLength decryptor_->encrypt(CRYPTO_BITFIELD_LENGTH, rbufptr, rbufptr); // TODO choose the crypto type based on the preference. // For now, choose ARC4. - if(rbufptr[3]&CRYPTO_PLAIN_TEXT && + if((rbufptr[3]&CRYPTO_PLAIN_TEXT) && + !option_->getAsBool(PREF_BT_FORCE_ENCRYPTION) && option_->get(PREF_BT_MIN_CRYPTO_LEVEL) == V_PLAIN) { A2_LOG_DEBUG(fmt("CUID#%" PRId64 " - peer provides plaintext.", cuid_)); |
