irc: drop support of DH-BLOWFISH and DH-AES SASL mechanisms (closes #175)

This commit is contained in:
Sébastien Helleu 2021-06-15 21:49:45 +02:00
parent 51740eb21e
commit e8cdda318f
34 changed files with 106 additions and 507 deletions

View File

@ -23,6 +23,7 @@ New features::
* irc: add command /setname, add support of message and capability "setname" (issue #1653)
* irc: always set realname in nicks even when extended-join capability is not enabled (issue #1653)
* irc: add support of FAIL/WARN/NOTE messages (issue #1653)
* irc: drop support of DH-BLOWFISH and DH-AES SASL mechanisms (issue #175)
Documentation::
@ -766,7 +767,7 @@ Bug fixes::
* core: fix command /cursor stop (do not toggle cursor mode) (issue #964)
* core: fix delayed refresh when the signal SIGWINCH is received (terminal resized), send signal "signal_sigwinch" after refreshes (issue #902)
* irc: fix update of server addresses on reconnection when the evaluated content has changed (issue #925)
* irc: fix crash in case of invalid server reply during SASL authentication with dh-blowfish or dh-aes mechanism
* irc: fix crash in case of invalid server reply during SASL authentication with DH-BLOWFISH or DH-AES mechanism
* irc: fix double decoding of IRC colors in messages sent/displayed by commands /msg and /query (issue #943)
* irc: fix parsing of message 324 (modes) when there is a colon before the modes (issue #913)
* relay: check buffer pointer received in "sync" and "desync" commands (weechat protocol) (issue #936)
@ -1553,7 +1554,7 @@ New features::
* aspell: add completion "aspell_dicts" (list of aspell installed dictionaries)
* aspell: add info "aspell_dict" (dictionaries used on a buffer)
* aspell: optimization on spellers to improve speed (save state by buffer)
* irc: add support of "dh-aes" SASL mechanism (patch #8020)
* irc: add support of DH-AES SASL mechanism (patch #8020)
* irc: add support of UHNAMES (capability "userhost-in-names") (task #9353)
* irc: add tag "irc_nick_back" for messages displayed in private buffer when a nick is back on server (task #12576)
* irc: add option irc.look.display_join_message (task #10895)
@ -1933,7 +1934,7 @@ Bug fixes::
* core: fix help on plugin option when config_set_desc_plugin is called to set help on newly created option
* core: enable background process under Cygwin to connect to servers, fix reconnection problem (bug #34626)
* aspell: fix URL detection (do not check spelling of URLs) (bug #34040)
* irc: fix memory leak in SASL/blowfish authentication
* irc: fix memory leak in SASL DH-BLOWFISH authentication
* irc: fix memory leak when a server is deleted
* irc: fix self-highlight when using /me with an IRC bouncer like znc (bug #35123)
* irc: use low priority for MODE sent automatically by WeeChat (when joining channel)

View File

@ -17,6 +17,23 @@ https://weechat.org/files/changelog/ChangeLog-devel.html[ChangeLog]
(file _ChangeLog.adoc_ in sources).
[[v3.3]]
== Version 3.3 (under dev)
[[v3.2_irc_sasl_blowfish_aes]]
=== Drop support of SASL DH-BLOWFISH and DH-AES mechanisms
The SASL mechanisms DH-BLOWFISH and DH-AES have been removed, because they
are insecure and already removed from most IRC servers. +
If you were using one of these mechanisms, it is highly recommended to switch
to any other supported SASL mechanism.
For example:
----
/set irc.server.example.sasl_mechanism scram-sha-256
----
[[v3.2]]
== Version 3.2 (2021-06-13)

View File

@ -2779,9 +2779,9 @@
** Standardwert: `+""+`
* [[option_irc.server_default.sasl_mechanism]] *irc.server_default.sasl_mechanism*
** Beschreibung: pass:none[Verfahren welches bei einer SASL Authentifizierung angewandt werden soll: "plain" Passwort wird im Klartext gesendet, "scram-sha-1" für SCRAM-Authentifizierung mit SHA-1-Digest-Algorithmus, "scram-sha-256" für SCRAM-Authenrifizierung mit SHA-256 Digest-Algorithmus, "scram-sha-512" für SCRAM-Authentifizierung mit SHA-512 Digest-Algorithmus, "ecdsa-nist256p-challenge" für öffentlich/private Schlüsselmethode, "external" SSL Zertifikat welches auf Client Seite vorliegt wird verwendet, "dh-blowfish" Passwort wird mittels blowfish verschlüsselt (unsicher, wird nicht empfohlen), "dh-aes" Passwort wird mittels AES verschlüsselt (unsicher, wird nicht empfohlen)]
** Beschreibung: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 digest algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 digest algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 digest algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL certificate]
** Typ: integer
** Werte: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes
** Werte: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external
** Standardwert: `+plain+`
* [[option_irc.server_default.sasl_password]] *irc.server_default.sasl_password*

View File

@ -3003,10 +3003,6 @@ WeeChat unterstützt eine SASL Authentifikation, mittels verschiedener Mechanism
* _scram-sha-512_: SCRAM mit SHA-512 Digest-Algorithmus
* _ecdsa-nist256p-challenge_: Abgleich von öffentlichem/privatem Schlüssel
* _external_: SSL Zertifikat welches auf Client Seite vorliegt
* _dh-blowfish_: Passwort wird mittels blowfish verschlüsselt
(*unsicher*, wird nicht empfohlen)
* _dh-aes_: Passwort wird mittels AES verschlüsselt
(*unsicher*, wird nicht empfohlen)
Optionen für Server sind:

View File

@ -2779,9 +2779,9 @@
** default value: `+""+`
* [[option_irc.server_default.sasl_mechanism]] *irc.server_default.sasl_mechanism*
** description: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 digest algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 digest algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 digest algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL cert, "dh-blowfish" for blowfish crypted password (insecure, not recommended), "dh-aes" for AES crypted password (insecure, not recommended)]
** description: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 digest algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 digest algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 digest algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL certificate]
** type: integer
** values: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes
** values: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external
** default value: `+plain+`
* [[option_irc.server_default.sasl_password]] *irc.server_default.sasl_password*

View File

@ -2947,8 +2947,6 @@ WeeChat supports SASL authentication, using different mechanisms:
* _scram-sha-512_: SCRAM with SHA-512 digest algorithm
* _ecdsa-nist256p-challenge_: challenge with public/private key
* _external_: client side SSL cert
* _dh-blowfish_: blowfish encrypted password (*insecure*, not recommended)
* _dh-aes_: AES encrypted password (*insecure*, not recommended)
Options in servers are:

View File

@ -2779,9 +2779,9 @@
** valeur par défaut: `+""+`
* [[option_irc.server_default.sasl_mechanism]] *irc.server_default.sasl_mechanism*
** description: pass:none[mécanisme pour l'authentification SASL : "plain" pour un mot de passe en clair, "scram-sha-1" pour une authentification SCRAM avec algorithme de hachage SHA-1, "scram-sha-256" pour une authentification SCRAM avec algorithme de hachage SHA-256, "scram-sha-512" pour une authentification SCRAM avec algorithme de hachage SHA-512, "ecdsa-nist256p-challenge" pour une authentification par challenge avec clé, "external" pour une authentification en utilisant un certificat SSL côté client, "dh-blowfish" pour un mot de passe chiffré avec blowfish (non sûr, non recommandé), "dh-aes" pour un mot de passe chiffré avec AES (non sûr, non recommandé)]
** description: pass:none[mécanisme pour l'authentification SASL : "plain" pour un mot de passe en clair, "scram-sha-1" pour une authentification SCRAM avec algorithme de hachage SHA-1, "scram-sha-256" pour une authentification SCRAM avec algorithme de hachage SHA-256, "scram-sha-512" pour une authentification SCRAM avec algorithme de hachage SHA-512, "ecdsa-nist256p-challenge" pour une authentification par challenge avec clé, "external" pour une authentification en utilisant un certificat SSL côté client]
** type: entier
** valeurs: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes
** valeurs: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external
** valeur par défaut: `+plain+`
* [[option_irc.server_default.sasl_password]] *irc.server_default.sasl_password*

View File

@ -3051,8 +3051,6 @@ mécanismes :
* _scram-sha-512_ : SCRAM avec algorithme de hachage SHA-512
* _ecdsa-nist256p-challenge_ : challenge avec clé publique/privée
* _external_ : certificat SSL côté client
* _dh-blowfish_ : mot de passe chiffré avec blowfish (*non sûr*, non recommandé)
* _dh-aes_ : mot de passe chiffré avec AES (*non sûr*, non recommandé)
Les options dans le serveur sont :

View File

@ -2779,9 +2779,9 @@
** valore predefinito: `+""+`
* [[option_irc.server_default.sasl_mechanism]] *irc.server_default.sasl_mechanism*
** descrizione: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 digest algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 digest algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 digest algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL cert, "dh-blowfish" for blowfish crypted password (insecure, not recommended), "dh-aes" for AES crypted password (insecure, not recommended)]
** descrizione: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 digest algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 digest algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 digest algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL certificate]
** tipo: intero
** valori: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes
** valori: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external
** valore predefinito: `+plain+`
* [[option_irc.server_default.sasl_password]] *irc.server_default.sasl_password*

View File

@ -3183,10 +3183,6 @@ WeeChat supports SASL authentication, using different mechanisms:
// TRANSLATION MISSING
* _ecdsa-nist256p-challenge_: challenge with public/private key
* _external_: certificato SSL da lato client
// TRANSLATION MISSING
* _dh-blowfish_: blowfish encrypted password (*insecure*, not recommended)
// TRANSLATION MISSING
* _dh-aes_: AES encrypted password (*insecure*, not recommended)
Le opzioni nel server sono:

View File

@ -2779,9 +2779,9 @@
** デフォルト値: `+""+`
* [[option_irc.server_default.sasl_mechanism]] *irc.server_default.sasl_mechanism*
** 説明: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 digest algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 digest algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 digest algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL cert, "dh-blowfish" for blowfish crypted password (insecure, not recommended), "dh-aes" for AES crypted password (insecure, not recommended)]
** 説明: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 digest algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 digest algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 digest algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL certificate]
** タイプ: 整数
** 値: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes
** 値: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external
** デフォルト値: `+plain+`
* [[option_irc.server_default.sasl_password]] *irc.server_default.sasl_password*

View File

@ -3036,8 +3036,6 @@ WeeChat は SASL 認証をサポートします、以下の認証メカニズム
* _scram-sha-512_: SCRAM with SHA-512 digest algorithm
* _ecdsa-nist256p-challenge_: 公開鍵/秘密鍵を使うチャレンジ認証
* _external_: クライアント側 SSL 証明書
* _dh-blowfish_: blowfish 暗号パスワード (*危険*、非推奨)
* _dh-aes_: AES 暗号パスワード (*危険*、非推奨)
サーバオプション:

View File

@ -2779,9 +2779,9 @@
** domyślna wartość: `+""+`
* [[option_irc.server_default.sasl_mechanism]] *irc.server_default.sasl_mechanism*
** opis: pass:none[mechanizm autentykacji SASL: "plain" dla hasła w czystym tekście, "scram-sha-1" dla uwierzytelnienia SCRAM za pomocą algorytmu SHA-1, "scram-sha-256" dla uwierzytelnienia SCRAM za pomocą algorytmu SHA-256, "scram-sha-512" dla uwierzytelnienia SCRAM za pomocą algorytmu SHA-512, "ecdsa-nist256p-challenge" uwierzytelnianie na podstawie pary kluczy, "external" dla uwierzytelnienia za pomocą certyfikatu SSL po stronie klienta, "dh-blowfish" dla hasła szyfrowanego za pomocą blowfish (mało bezpieczne, niepolecane), "dh-aes" dla hasła szyfrowanego za pomocą AES (mało bezpieczne, niepolecane)]
** opis: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 digest algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 digest algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 digest algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL certificate]
** typ: liczba
** wartości: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes
** wartości: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external
** domyślna wartość: `+plain+`
* [[option_irc.server_default.sasl_password]] *irc.server_default.sasl_password*

View File

@ -2971,10 +2971,6 @@ WeeChat wspiera uwierzytelnianie SASL, używając różnych mechanizmów:
* _scram-sha-512_: SCRAM z użyciem algorytmu SHA-512
* _ecdsa-nist256p-challenge_: klucz prywatny/publiczny
* _external_: certyfikat SSL po stronie klienta
* _dh-blowfish_: hasło zaszyfrowane algorytmem blowfish
(*niebezpieczne*, nie zalecane)
* _dh-aes_: hasło zaszyfrowane algorytmem AES
(*niebezpieczne*, nie zalecane)
Opcje dla serwerów to:

View File

@ -2779,9 +2779,9 @@
** подразумевана вредност: `+""+`
* [[option_irc.server_default.sasl_mechanism]] *irc.server_default.sasl_mechanism*
** опис: pass:none[механизам SASL аутентификације: „plain” за просту текст лозинку, „scram-sha-1” за SCRAM аутентификацију са SHA-1 digest алгоритмом, „scram-sha-256” за SCRAM аутентификацију са SHA-256 digest алгоритмом, „scram-sha-512” за SCRAM аутентификацију са SHA-512 digest алгоритмом, „ecdsa-nist256p-challenge” за аутентификацију са изазовом базираним на кључу, „external” за аутентификацију употребом SSL сертификата са клијентске стране, „dh-blowfish” за blowfish шифровану лозинку (није безбедно, не препоручује се), „dh-aes” за AES шифровану лозинку (није безбедно, не препоручује се)]
** опис: pass:none[mechanism for SASL authentication: "plain" for plain text password, "scram-sha-1" for SCRAM authentication with SHA-1 digest algorithm, "scram-sha-256" for SCRAM authentication with SHA-256 digest algorithm, "scram-sha-512" for SCRAM authentication with SHA-512 digest algorithm, "ecdsa-nist256p-challenge" for key-based challenge authentication, "external" for authentication using client side SSL certificate]
** тип: целобројна
** вредности: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external, dh-blowfish, dh-aes
** вредности: plain, scram-sha-1, scram-sha-256, scram-sha-512, ecdsa-nist256p-challenge, external
** подразумевана вредност: `+plain+`
* [[option_irc.server_default.sasl_password]] *irc.server_default.sasl_password*

View File

@ -2722,8 +2722,6 @@ $ openssl req -nodes -newkey rsa:2048 -keyout nick.pem -x509 -days 365 -out nick
* _scram-sha-512_: SCRAM са SHA-512 digest алгоритмом
* _ecdsa-nist256p-challenge_: изазов са јавним/приватним кључем
* _external_: SSL сертификат са клијентске стране
* _dh-blowfish_: blowfish шифрована лозинка (*небезбедно*, не препоручује се)
* _dh-aes_: AES шифрована лозинка (*небезбедно*, не препоручује се)
Опције за сервере су следеће:

View File

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2021-05-25 18:28+0200\n"
"Last-Translator: Ondřej Súkup <mimi.vx@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -8035,9 +8035,7 @@ msgid ""
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
#, fuzzy

View File

@ -24,7 +24,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2021-06-05 23:02+0200\n"
"Last-Translator: Nils Görs <weechatter@arcor.de>\n"
"Language-Team: German <kde-i18n-de@kde.org>\n"
@ -9886,15 +9886,23 @@ msgstr ""
"(siehe /help cap um eine Liste von Fähigkeiten zu erhalten die von WeeChat "
"unterstützt werden) (Beispiel: \"away-notify,multi-prefix\")"
#, fuzzy
#| msgid ""
#| "mechanism for SASL authentication: \"plain\" for plain text password, "
#| "\"scram-sha-1\" for SCRAM authentication with SHA-1 digest algorithm, "
#| "\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
#| "\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
#| "\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
#| "\"external\" for authentication using client side SSL cert, \"dh-blowfish"
#| "\" for blowfish crypted password (insecure, not recommended), \"dh-aes\" "
#| "for AES crypted password (insecure, not recommended)"
msgid ""
"mechanism for SASL authentication: \"plain\" for plain text password, "
"\"scram-sha-1\" for SCRAM authentication with SHA-1 digest algorithm, "
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
"Verfahren welches bei einer SASL Authentifizierung angewandt werden soll: "
"\"plain\" Passwort wird im Klartext gesendet, \"scram-sha-1\" für SCRAM-"

View File

@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2021-05-25 18:28+0200\n"
"Last-Translator: Elián Hanisch <lambdae2@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -8274,9 +8274,7 @@ msgid ""
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
"mecanismo de autenticación SASL: \"plain\" para contraseñas en texto plano, "
"\"dh-blowfish\" para contraseña encriptada, \"external\" para autentificar "

View File

@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"PO-Revision-Date: 2021-06-15 18:52+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2021-06-15 20:43+0200\n"
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: fr\n"
@ -8247,14 +8247,19 @@ msgstr ""
" ls : lister les capacités supportées par le serveur\n"
" list : lister les capacités actuellement activées\n"
" req : demander une capacité\n"
" ack : accuser réception de capacités qui nécessitent un accusé de réception du client\n"
" ack : accuser réception de capacités qui nécessitent un accusé de "
"réception du client\n"
" end : terminer la négociation de capacité\n"
"\n"
"Sans paramètre, \"ls\" et \"list\" sont envoyés.\n"
"\n"
"Les capacités supportées par WeeChat sont : account-notify, away-notify, cap-notify, chghost, extended-join, invite-notify, multi-prefix, server-time, setname, userhost-in-names.\n"
"Les capacités supportées par WeeChat sont : account-notify, away-notify, cap-"
"notify, chghost, extended-join, invite-notify, multi-prefix, server-time, "
"setname, userhost-in-names.\n"
"\n"
"Les capacités à activer automatiquement sur les serveurs peuvent être définies dans l'option irc.server_default.capabilities (ou par serveur dans l'option irc.server.xxx.capabilities).\n"
"Les capacités à activer automatiquement sur les serveurs peuvent être "
"définies dans l'option irc.server_default.capabilities (ou par serveur dans "
"l'option irc.server.xxx.capabilities).\n"
"\n"
"Exemples :\n"
" /cap\n"
@ -9705,9 +9710,7 @@ msgid ""
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
"mécanisme pour l'authentification SASL : \"plain\" pour un mot de passe en "
"clair, \"scram-sha-1\" pour une authentification SCRAM avec algorithme de "
@ -9715,9 +9718,7 @@ msgstr ""
"algorithme de hachage SHA-256, \"scram-sha-512\" pour une authentification "
"SCRAM avec algorithme de hachage SHA-512, \"ecdsa-nist256p-challenge\" pour "
"une authentification par challenge avec clé, \"external\" pour une "
"authentification en utilisant un certificat SSL côté client, \"dh-blowfish\" "
"pour un mot de passe chiffré avec blowfish (non sûr, non recommandé), \"dh-"
"aes\" pour un mot de passe chiffré avec AES (non sûr, non recommandé)"
"authentification en utilisant un certificat SSL côté client"
msgid ""
"username for SASL authentication; this option is not used for mechanism "

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2021-05-25 18:28+0200\n"
"Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -7639,9 +7639,7 @@ msgid ""
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
#, fuzzy

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2021-05-25 18:28+0200\n"
"Last-Translator: Esteban I. Ruiz Moreno <exio4.com@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -8416,9 +8416,7 @@ msgid ""
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
"meccanismo per l'autenticazione SASL: \"plain\" per le password in chiaro, "
"\"dh-blowfish\" per le password cifrate in blowfish, \"dh-aes\" per le "

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2021-05-25 18:28+0200\n"
"Last-Translator: AYANOKOUZI, Ryuunosuke <i38w7i3@yahoo.co.jp>\n"
"Language-Team: Japanese <https://github.com/l/weechat/tree/master/"
@ -9251,9 +9251,7 @@ msgid ""
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
"SASL 認証メカニズム: \"plain\" は平文パスワード、\"ecdsa-nist256p-challenge"
"\" は鍵を使ったチャレンジ認証、\"external\" はクライアント側の SSL 証明書を利"

View File

@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2021-06-13 14:40+0200\n"
"Last-Translator: Krzysztof Korościk <soltys@soltys.info>\n"
"Language-Team: Polish <kde-i18n-doc@kde.org>\n"
@ -9487,15 +9487,23 @@ msgstr ""
"są dostępne (zobacz /help cap żeby poznać listę opcji wspieranych przez "
"WeeChat) (przykład: \"away-notify,multi-prefix\")"
#, fuzzy
#| msgid ""
#| "mechanism for SASL authentication: \"plain\" for plain text password, "
#| "\"scram-sha-1\" for SCRAM authentication with SHA-1 digest algorithm, "
#| "\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
#| "\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
#| "\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
#| "\"external\" for authentication using client side SSL cert, \"dh-blowfish"
#| "\" for blowfish crypted password (insecure, not recommended), \"dh-aes\" "
#| "for AES crypted password (insecure, not recommended)"
msgid ""
"mechanism for SASL authentication: \"plain\" for plain text password, "
"\"scram-sha-1\" for SCRAM authentication with SHA-1 digest algorithm, "
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
"mechanizm autentykacji SASL: \"plain\" dla hasła w czystym tekście, \"scram-"
"sha-1\" dla uwierzytelnienia SCRAM za pomocą algorytmu SHA-1, \"scram-"

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2021-05-25 18:28+0200\n"
"Last-Translator: Vasco Almeida <vascomalmeida@sapo.pt>\n"
"Language-Team: Portuguese <>\n"
@ -9038,9 +9038,7 @@ msgid ""
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
"mecanismo de autenticação SASL: \"plain\" para palavra-passe em texto "
"simples, \"ecdsa-nist256p-challenge\" para autenticação por desafio com "

View File

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2021-05-25 18:28+0200\n"
"Last-Translator: Érico Nogueira <ericonr@disroot.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -8081,9 +8081,7 @@ msgid ""
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
#, fuzzy

View File

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2021-05-25 18:28+0200\n"
"Last-Translator: Aleksey V Zapparov AKA ixti <ixti@member.fsf.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -7669,9 +7669,7 @@ msgid ""
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
#, fuzzy

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2021-06-03 15:15+0400\n"
"Last-Translator: Ivan Pešić <ivan.pesic@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -9469,15 +9469,23 @@ msgstr ""
"за листу могућности које подржава програм WeeChat) (пример: „away-notify,"
"multi-prefix”)"
#, fuzzy
#| msgid ""
#| "mechanism for SASL authentication: \"plain\" for plain text password, "
#| "\"scram-sha-1\" for SCRAM authentication with SHA-1 digest algorithm, "
#| "\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
#| "\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
#| "\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
#| "\"external\" for authentication using client side SSL cert, \"dh-blowfish"
#| "\" for blowfish crypted password (insecure, not recommended), \"dh-aes\" "
#| "for AES crypted password (insecure, not recommended)"
msgid ""
"mechanism for SASL authentication: \"plain\" for plain text password, "
"\"scram-sha-1\" for SCRAM authentication with SHA-1 digest algorithm, "
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
"механизам SASL аутентификације: „plain” за просту текст лозинку, „scram-"
"sha-1” за SCRAM аутентификацију са SHA-1 digest алгоритмом, „scram-sha-256” "

View File

@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2021-05-25 18:28+0200\n"
"Last-Translator: Emir SARI <bitigchi@me.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -7348,9 +7348,7 @@ msgid ""
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
msgid ""

View File

@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2021-06-15 18:50+0200\n"
"POT-Creation-Date: 2021-06-15 20:40+0200\n"
"PO-Revision-Date: 2014-08-16 10:27+0200\n"
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@ -6822,9 +6822,7 @@ msgid ""
"\"scram-sha-256\" for SCRAM authentication with SHA-256 digest algorithm, "
"\"scram-sha-512\" for SCRAM authentication with SHA-512 digest algorithm, "
"\"ecdsa-nist256p-challenge\" for key-based challenge authentication, "
"\"external\" for authentication using client side SSL cert, \"dh-blowfish\" "
"for blowfish crypted password (insecure, not recommended), \"dh-aes\" for "
"AES crypted password (insecure, not recommended)"
"\"external\" for authentication using client side SSL certificate"
msgstr ""
msgid ""

View File

@ -1868,13 +1868,9 @@ irc_config_server_new_option (struct t_config_file *config_file,
"\"ecdsa-nist256p-challenge\" for key-based "
"challenge authentication, "
"\"external\" for authentication using client side SSL "
"cert, "
"\"dh-blowfish\" for blowfish crypted password "
"(insecure, not recommended), "
"\"dh-aes\" for AES crypted password "
"(insecure, not recommended)"),
"certificate"),
"plain|scram-sha-1|scram-sha-256|scram-sha-512|"
"ecdsa-nist256p-challenge|external|dh-blowfish|dh-aes",
"ecdsa-nist256p-challenge|external",
0, 0,
default_value, value,
null_value_allowed,

View File

@ -502,14 +502,6 @@ IRC_PROTOCOL_CALLBACK(authenticate)
case IRC_SASL_MECHANISM_EXTERNAL:
answer = strdup ("+");
break;
case IRC_SASL_MECHANISM_DH_BLOWFISH:
answer = irc_sasl_mechanism_dh_blowfish (
argv[1], sasl_username, sasl_password, &sasl_error);
break;
case IRC_SASL_MECHANISM_DH_AES:
answer = irc_sasl_mechanism_dh_aes (
argv[1], sasl_username, sasl_password, &sasl_error);
break;
}
if (answer)
{

View File

@ -43,7 +43,7 @@
*/
char *irc_sasl_mechanism_string[IRC_NUM_SASL_MECHANISMS] =
{ "plain", "scram-sha-1", "scram-sha-256", "scram-sha-512",
"ecdsa-nist256p-challenge", "external", "dh-blowfish", "dh-aes" };
"ecdsa-nist256p-challenge", "external" };
/*
@ -711,385 +711,3 @@ irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *server,
return NULL;
#endif /* LIBGNUTLS_VERSION_NUMBER >= 0x030015 */
}
/*
* Reads key sent by server (Diffie-Hellman key exchange).
*
* If an error occurs and if sasl_error is not NULL, *sasl_error is set to the
* error and must be freed after use.
*
* Returns:
* 1: OK
* 0: error
*/
int
irc_sasl_dh (const char *data_base64,
unsigned char **public_bin, unsigned char **secret_bin,
int *length_key, char **sasl_error)
{
char *data;
unsigned char *ptr_data;
int length_data, size, num_bits_prime_number, rc;
size_t num_written;
gcry_mpi_t data_prime_number, data_generator_number, data_server_pub_key;
gcry_mpi_t pub_key, priv_key, secret_mpi;
rc = 0;
data = NULL;
data_prime_number = NULL;
data_generator_number = NULL;
data_server_pub_key = NULL;
pub_key = NULL;
priv_key = NULL;
secret_mpi = NULL;
/* decode data */
data = malloc (strlen (data_base64) + 1);
if (!data)
goto memory_error;
length_data = weechat_string_base_decode (64, data_base64, data);
ptr_data = (unsigned char *)data;
/* extract prime number */
size = ntohs ((((unsigned int)ptr_data[1]) << 8) | ptr_data[0]);
ptr_data += 2;
length_data -= 2;
if (size > length_data)
goto crypto_error;
data_prime_number = gcry_mpi_new (size * 8);
gcry_mpi_scan (&data_prime_number, GCRYMPI_FMT_USG, ptr_data, size, NULL);
num_bits_prime_number = gcry_mpi_get_nbits (data_prime_number);
if (num_bits_prime_number == 0 || INT_MAX - 7 < num_bits_prime_number)
goto crypto_error;
ptr_data += size;
length_data -= size;
/* extract generator number */
size = ntohs ((((unsigned int)ptr_data[1]) << 8) | ptr_data[0]);
ptr_data += 2;
length_data -= 2;
if (size > length_data)
goto crypto_error;
data_generator_number = gcry_mpi_new (size * 8);
gcry_mpi_scan (&data_generator_number, GCRYMPI_FMT_USG, ptr_data, size, NULL);
ptr_data += size;
length_data -= size;
/* extract server-generated public key */
size = ntohs ((((unsigned int)ptr_data[1]) << 8) | ptr_data[0]);
ptr_data += 2;
length_data -= 2;
if (size > length_data)
goto crypto_error;
data_server_pub_key = gcry_mpi_new (size * 8);
gcry_mpi_scan (&data_server_pub_key, GCRYMPI_FMT_USG, ptr_data, size, NULL);
/* generate keys */
pub_key = gcry_mpi_new (num_bits_prime_number);
priv_key = gcry_mpi_new (num_bits_prime_number);
gcry_mpi_randomize (priv_key, num_bits_prime_number, GCRY_STRONG_RANDOM);
/* pub_key = (g ^ priv_key) % p */
gcry_mpi_powm (pub_key, data_generator_number, priv_key, data_prime_number);
/* compute secret_bin */
*length_key = (num_bits_prime_number + 7) / 8;
*secret_bin = malloc (*length_key);
secret_mpi = gcry_mpi_new (num_bits_prime_number);
/* secret_mpi = (y ^ priv_key) % p */
gcry_mpi_powm (secret_mpi, data_server_pub_key, priv_key, data_prime_number);
gcry_mpi_print (GCRYMPI_FMT_USG, *secret_bin, *length_key,
&num_written, secret_mpi);
/* create public_bin */
*public_bin = malloc (*length_key);
gcry_mpi_print (GCRYMPI_FMT_USG, *public_bin, *length_key,
&num_written, pub_key);
rc = 1;
goto end;
memory_error:
if (sasl_error)
*sasl_error = strdup (_("memory error"));
goto end;
crypto_error:
if (sasl_error)
*sasl_error = strdup (_("cryptography error"));
goto end;
end:
if (data)
free (data);
if (data_prime_number)
gcry_mpi_release (data_prime_number);
if (data_generator_number)
gcry_mpi_release (data_generator_number);
if (data_server_pub_key)
gcry_mpi_release (data_server_pub_key);
if (pub_key)
gcry_mpi_release (pub_key);
if (priv_key)
gcry_mpi_release (priv_key);
if (secret_mpi)
gcry_mpi_release (secret_mpi);
return rc;
}
/*
* Builds answer for SASL authentication, using mechanism "DH-BLOWFISH".
*
* Argument data_base64 is a concatenation of 3 strings, each string is composed
* of 2 bytes (length of string), followed by content of string:
* 1. a prime number
* 2. a generator number
* 3. server-generated public key
*
* If an error occurs and if sasl_error is not NULL, *sasl_error is set to the
* error and must be freed after use.
*
* Note: result must be freed after use.
*/
char *
irc_sasl_mechanism_dh_blowfish (const char *data_base64,
const char *sasl_username,
const char *sasl_password,
char **sasl_error)
{
char *answer, *ptr_answer, *answer_base64;
unsigned char *password_clear, *password_crypted;
int length_key, length_username, length_password, length_answer;
unsigned char *public_bin, *secret_bin;
gcry_cipher_hd_t gcrypt_handle;
password_clear = NULL;
password_crypted = NULL;
answer = NULL;
answer_base64 = NULL;
secret_bin = NULL;
public_bin = NULL;
if (!irc_sasl_dh (data_base64, &public_bin, &secret_bin, &length_key,
sasl_error))
{
goto end;
}
/* create password buffers (clear and crypted) */
length_password = strlen (sasl_password) +
((8 - (strlen (sasl_password) % 8)) % 8);
password_clear = calloc (1, length_password);
password_crypted = calloc (1, length_password);
memcpy (password_clear, sasl_password, strlen (sasl_password));
/* crypt password using blowfish */
if (gcry_cipher_open (&gcrypt_handle, GCRY_CIPHER_BLOWFISH,
GCRY_CIPHER_MODE_ECB, 0) != 0)
goto crypto_error;
if (gcry_cipher_setkey (gcrypt_handle, secret_bin, length_key) != 0)
goto crypto_error;
if (gcry_cipher_encrypt (gcrypt_handle,
password_crypted, length_password,
password_clear, length_password) != 0)
goto crypto_error;
gcry_cipher_close (gcrypt_handle);
/*
* build answer for server, it is concatenation of:
* 1. key length (2 bytes)
* 2. public key ('length_key' bytes)
* 3. sasl_username ('length_username'+1 bytes)
* 4. encrypted password ('length_password' bytes)
*/
length_username = strlen (sasl_username) + 1;
length_answer = 2 + length_key + length_username + length_password;
answer = malloc (length_answer);
ptr_answer = answer;
*((unsigned int *)ptr_answer) = htons (length_key);
ptr_answer += 2;
memcpy (ptr_answer, public_bin, length_key);
ptr_answer += length_key;
memcpy (ptr_answer, sasl_username, length_username);
ptr_answer += length_username;
memcpy (ptr_answer, password_crypted, length_password);
/* encode answer to base64 */
answer_base64 = malloc ((length_answer + 1) * 4);
if (answer_base64)
{
if (weechat_string_base_encode (64, answer, length_answer,
answer_base64) < 0)
{
free (answer_base64);
answer_base64 = NULL;
}
}
goto end;
crypto_error:
if (sasl_error)
*sasl_error = strdup (_("cryptography error"));
goto end;
end:
if (secret_bin)
free (secret_bin);
if (public_bin)
free (public_bin);
if (password_clear)
free (password_clear);
if (password_crypted)
free (password_crypted);
if (answer)
free (answer);
return answer_base64;
}
/*
* Builds answer for SASL authentication, using mechanism "DH-AES".
*
* Argument data_base64 is a concatenation of 3 strings, each string is composed
* of 2 bytes (length of string), followed by content of string:
* 1. a prime number
* 2. a generator number
* 3. server-generated public key
*
* If an error occurs and if sasl_error is not NULL, *sasl_error is set to the
* error and must be freed after use.
*
* Note: result must be freed after use.
*/
char *
irc_sasl_mechanism_dh_aes (const char *data_base64,
const char *sasl_username,
const char *sasl_password,
char **sasl_error)
{
char *answer, *ptr_answer, *answer_base64;
unsigned char *ptr_userpass, *userpass_clear, *userpass_crypted;
int length_key, length_answer;
int length_username, length_password, length_userpass;
unsigned char *public_bin, *secret_bin;
char iv[16];
int cipher_algo;
gcry_cipher_hd_t gcrypt_handle;
userpass_clear = NULL;
userpass_crypted = NULL;
answer = NULL;
answer_base64 = NULL;
secret_bin = NULL;
public_bin = NULL;
if (!irc_sasl_dh (data_base64, &public_bin, &secret_bin, &length_key,
sasl_error))
{
goto end;
}
/* Select cipher algorithm: key length * 8 = cipher bit size */
switch (length_key)
{
case 32:
cipher_algo = GCRY_CIPHER_AES256;
break;
case 24:
cipher_algo = GCRY_CIPHER_AES192;
break;
case 16:
cipher_algo = GCRY_CIPHER_AES128;
break;
default:
/* Invalid bit length */
goto end;
}
/* Generate the IV */
gcry_randomize (iv, sizeof (iv), GCRY_STRONG_RANDOM);
/* create user/pass buffers (clear and crypted) */
length_username = strlen (sasl_username) + 1;
length_password = strlen (sasl_password) + 1;
length_userpass = length_username + length_password +
((16 - ((length_username + length_password) % 16)) % 16);
userpass_clear = calloc (1, length_userpass);
ptr_userpass = userpass_clear;
userpass_crypted = calloc (1, length_userpass);
memcpy (ptr_userpass, sasl_username, length_username);
ptr_userpass += length_username;
memcpy (ptr_userpass, sasl_password, length_password);
/* crypt password using AES in CBC mode */
if (gcry_cipher_open (&gcrypt_handle, cipher_algo,
GCRY_CIPHER_MODE_CBC, 0) != 0)
goto crypto_error;
if (gcry_cipher_setkey (gcrypt_handle, secret_bin, length_key) != 0)
goto crypto_error;
if (gcry_cipher_setiv (gcrypt_handle, iv, sizeof (iv)) != 0)
goto crypto_error;
if (gcry_cipher_encrypt (gcrypt_handle,
userpass_crypted, length_userpass,
userpass_clear, length_userpass) != 0)
goto crypto_error;
gcry_cipher_close (gcrypt_handle);
/*
* build answer for server, it is concatenation of:
* 1. key length (2 bytes)
* 2. public key ('length_key' bytes)
* 3. IV (sizeof (iv) bytes)
* 4. encrypted password ('length_userpass' bytes)
*/
length_answer = 2 + length_key + sizeof (iv) + length_userpass;
answer = malloc (length_answer);
ptr_answer = answer;
*((unsigned int *)ptr_answer) = htons (length_key);
ptr_answer += 2;
memcpy (ptr_answer, public_bin, length_key);
ptr_answer += length_key;
memcpy (ptr_answer, iv, sizeof (iv));
ptr_answer += sizeof (iv);
memcpy (ptr_answer, userpass_crypted, length_userpass);
/* encode answer to base64 */
answer_base64 = malloc ((length_answer + 1) * 4);
if (answer_base64)
{
if (weechat_string_base_encode (64, answer, length_answer,
answer_base64) < 0)
{
free (answer_base64);
answer_base64 = NULL;
}
}
goto end;
crypto_error:
if (sasl_error)
*sasl_error = strdup (_("cryptography error"));
goto end;
end:
if (secret_bin)
free (secret_bin);
if (public_bin)
free (public_bin);
if (userpass_clear)
free (userpass_clear);
if (userpass_crypted)
free (userpass_crypted);
if (answer)
free (answer);
return answer_base64;
}

View File

@ -35,8 +35,6 @@ enum t_irc_sasl_mechanism
IRC_SASL_MECHANISM_SCRAM_SHA_512,
IRC_SASL_MECHANISM_ECDSA_NIST256P_CHALLENGE,
IRC_SASL_MECHANISM_EXTERNAL,
IRC_SASL_MECHANISM_DH_BLOWFISH,
IRC_SASL_MECHANISM_DH_AES,
/* number of SASL mechanisms */
IRC_NUM_SASL_MECHANISMS,
};
@ -56,13 +54,5 @@ extern char *irc_sasl_mechanism_ecdsa_nist256p_challenge (struct t_irc_server *s
const char *sasl_username,
const char *sasl_key,
char **sasl_error);
extern char *irc_sasl_mechanism_dh_blowfish (const char *data_base64,
const char *sasl_username,
const char *sasl_password,
char **sasl_error);
extern char *irc_sasl_mechanism_dh_aes (const char *data_base64,
const char *sasl_username,
const char *sasl_password,
char **sasl_error);
#endif /* WEECHAT_PLUGIN_IRC_SASL_H */