/* * Decrypt NOTICE messages (and forward DH1080 key-exchange) */ void decrypt_notice(SERVER_REC * server, char *msg, char *nick, char *address, char *target) { GString *decrypted; char *DH1024warn; if (strncmp(msg, "DH1024_", 7) == 0) { DH1024warn = "\002FiSH:\002 Received \002old DH1024\002 public key from you! Please update to latest version: https://github.com/falsovsky/FiSH-irssi"; signal_stop(); irc_send_cmdv((IRC_SERVER_REC *) server, "NOTICE %s :%s\n", nick, DH1024warn); signal_emit("message irc own_notice", 3, server, DH1024warn, nick); return; } if (strncmp(msg, "DH1080_", 7) == 0) { DH1080_received(server, msg, nick, address, target); return; } #ifdef FiSH_DECRYPT_ZNC_LOGS if (IsZNCtimestamp(msg)) msg += 11; #endif decrypted = g_string_new(""); if (FiSH_decrypt(server, msg, ischannel(*target) ? target : nick, decrypted)) { signal_continue(5, server, decrypted->str, nick, address, target); ZeroMemory(decrypted->str, decrypted->len); } g_string_free(decrypted, TRUE); }
void decrypt_msg(SERVER_REC *server, char *msg, const char *nick, const char *address, const char *target) { const char *contactPtr, *msg_bak=msg; char contactName[CONTACT_SIZE]=""; if (msg==NULL || target==NULL || nick==NULL) return; #ifdef FiSH_DECRYPT_ZNC_LOGS if (IsZNCtimestamp(msg)) msg += 11; #endif //channel? if (ischannel(*target)) contactPtr=target; else if (strcmp(nick, "-psyBNC")==0) { // psyBNC log message found // <-psyBNC> Nw~Thu Mar 29 15:02:45 :([email protected]) +OK e3454451hbadA0 msg=strstr(msg, " :(")+3; // points to nick!ident@host in psybnc log if (msg==(char *)3) return; ExtractRnick(contactName, msg); msg=strchr(msg, ' ')+1; if (msg==(char *)1) return; contactPtr = contactName; } else if (strcmp(nick, "-sBNC")==0) { // sBNC log message found (PRIVMSG) // <-sBNC> Sun Sep 1 13:37:00 2007 someone ([email protected]): +OK Mp1p8.qYxFN1 if ((msg=strstr(msg, " ("))==NULL) return; else msg--; // points to the last char of the nick while (*msg!='\0' && *msg!=' ' && msg > msg_bak) msg--; if (*msg==' ') msg++; // now points to the first char of the nick else return; ExtractRnick(contactName, msg); if ((msg=strstr(msg, "): "))==NULL) return; // find metadata end msg += 3; // now points to encrypted message contactPtr = contactName; } else contactPtr=nick; if (FiSH_decrypt(server, msg, msg, contactPtr)) { if (strncmp(msg_bak, "\001ACTION ", 8)==0) { // ACTION message found signal_stop(); signal_emit("message irc action", 5, server, msg_bak+8, nick, address, target); } } }