Develop and Download Open Source Software

Browse Subversion Repository

Diff of /branches/ssh_chacha20poly1305/ttssh2/ttxssh/crypt.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3159 by maya, Tue Nov 18 06:24:09 2008 UTC revision 3168 by doda, Fri Nov 21 18:54:22 2008 UTC
# Line 48  SOFTWARE, EVEN IF ADVISED OF THE POSSIBI Line 48  SOFTWARE, EVEN IF ADVISED OF THE POSSIBI
48  #define DEATTACK_DETECTED       1  #define DEATTACK_DETECTED       1
49    
50  /*  /*
51   * $Id: crypt.c,v 1.24 2008-11-18 06:24:09 maya Exp $ Cryptographic attack   * $Id: crypt.c,v 1.25 2008-11-21 18:54:22 doda Exp $ Cryptographic attack
52   * detector for ssh - source code (C)1998 CORE-SDI, Buenos Aires Argentina   * detector for ssh - source code (C)1998 CORE-SDI, Buenos Aires Argentina
53   * Ariel Futoransky(futo@core-sdi.com) <http://www.core-sdi.com>   * Ariel Futoransky(futo@core-sdi.com) <http://www.core-sdi.com>
54   */   */
# Line 481  error: Line 481  error:
481          free(newbuf);          free(newbuf);
482  }  }
483    
484    static void cArcfour_encrypt(PTInstVar pvar, unsigned char FAR * buf,
485                                   int bytes)
486    {
487            unsigned char *newbuf = malloc(bytes);
488            int block_size = pvar->ssh2_keys[MODE_OUT].enc.block_size;
489    
490            // 事前復号化により、全ペイロードが復号化されている場合は、0バイトになる。(2004.11.7 yutaka)
491            if (bytes == 0)
492                    goto error;
493    
494            if (newbuf == NULL)
495                    return;
496    
497            if (bytes % block_size) {
498                    char tmp[80];
499                    UTIL_get_lang_msg("MSG_ARCFOUR_ENCRYPT_ERROR1", pvar,
500                                      "Arcfour encrypt error(1): bytes %d (%d)");
501                    _snprintf_s(tmp, sizeof(tmp), _TRUNCATE,
502                                pvar->ts->UIMsg, bytes, block_size);
503                    notify_fatal_error(pvar, tmp);
504                    goto error;
505            }
506    
507            if (EVP_Cipher(&pvar->evpcip[MODE_OUT], newbuf, buf, bytes) == 0) {
508                    UTIL_get_lang_msg("MSG_ARCFOUR_ENCRYPT_ERROR2", pvar,
509                                      "Arcfour encrypt error(2)");
510                    notify_fatal_error(pvar, pvar->ts->UIMsg);
511                    goto error;
512    
513            } else {
514                    memcpy(buf, newbuf, bytes);
515    
516            }
517    
518    error:
519            free(newbuf);
520    }
521    
522    static void cArcfour_decrypt(PTInstVar pvar, unsigned char FAR * buf,
523                                   int bytes)
524    {
525            unsigned char *newbuf = malloc(bytes);
526            int block_size = pvar->ssh2_keys[MODE_IN].enc.block_size;
527    
528            // 事前復号化により、全ペイロードが復号化されている場合は、0バイトになる。(2004.11.7 yutaka)
529            if (bytes == 0)
530                    goto error;
531    
532            if (newbuf == NULL)
533                    return;
534    
535            if (bytes % block_size) {
536                    char tmp[80];
537                    UTIL_get_lang_msg("MSG_ARCFOUR_DECRYPT_ERROR1", pvar,
538                                      "Arcfour decrypt error(1): bytes %d (%d)");
539                    _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, bytes, block_size);
540                    notify_fatal_error(pvar, tmp);
541                    goto error;
542            }
543    
544            if (EVP_Cipher(&pvar->evpcip[MODE_IN], newbuf, buf, bytes) == 0) {
545                    UTIL_get_lang_msg("MSG_ARCFOUR_DECRYPT_ERROR2", pvar,
546                                      "Arcfour decrypt error(2)");
547                    notify_fatal_error(pvar, pvar->ts->UIMsg);
548                    goto error;
549    
550            } else {
551                    memcpy(buf, newbuf, bytes);
552    
553            }
554    
555    error:
556            free(newbuf);
557    }
558    
559    
560    
561  static void c3DES_encrypt(PTInstVar pvar, unsigned char FAR * buf,  static void c3DES_encrypt(PTInstVar pvar, unsigned char FAR * buf,
# Line 710  BOOL CRYPT_set_supported_ciphers(PTInstV Line 785  BOOL CRYPT_set_supported_ciphers(PTInstV
785                              | (1 << SSH2_CIPHER_BLOWFISH_CBC)                              | (1 << SSH2_CIPHER_BLOWFISH_CBC)
786                              | (1 << SSH2_CIPHER_AES128_CTR)                              | (1 << SSH2_CIPHER_AES128_CTR)
787                              | (1 << SSH2_CIPHER_AES192_CTR)                              | (1 << SSH2_CIPHER_AES192_CTR)
788                              | (1 << SSH2_CIPHER_AES256_CTR);                              | (1 << SSH2_CIPHER_AES256_CTR)
789                                | (1 << SSH2_CIPHER_ARCFOUR);
790          }          }
791    
792          sender_ciphers &= cipher_mask;          sender_ciphers &= cipher_mask;
# Line 1217  BOOL CRYPT_start_encryption(PTInstVar pv Line 1293  BOOL CRYPT_start_encryption(PTInstVar pv
1293                                  break;                                  break;
1294                          }                          }
1295    
1296                    case SSH2_CIPHER_ARCFOUR:
1297                            {
1298                                    struct Enc *enc;
1299    
1300                                    enc = &pvar->ssh2_keys[MODE_OUT].enc;
1301                                    cipher_init_SSH2(&pvar->evpcip[MODE_OUT],
1302                                                     enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher),
1303                                                     enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher),
1304                                                     CIPHER_ENCRYPT,
1305                                                     get_cipher_EVP_CIPHER(pvar->crypt_state.sender_cipher),
1306                                                     pvar);
1307                                    //debug_print(10, enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher));
1308                                    //debug_print(11, enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher));
1309    
1310                                    pvar->crypt_state.encrypt = cArcfour_encrypt;
1311                                    break;
1312                            }
1313    
1314                  case SSH_CIPHER_3DES:{                  case SSH_CIPHER_3DES:{
1315                                  c3DES_init(encryption_key, &pvar->crypt_state.enc.c3DES);                                  c3DES_init(encryption_key, &pvar->crypt_state.enc.c3DES);
1316                                  pvar->crypt_state.encrypt = c3DES_encrypt;                                  pvar->crypt_state.encrypt = c3DES_encrypt;
# Line 1316  BOOL CRYPT_start_encryption(PTInstVar pv Line 1410  BOOL CRYPT_start_encryption(PTInstVar pv
1410                                  break;                                  break;
1411                          }                          }
1412    
1413                    case SSH2_CIPHER_ARCFOUR:
1414                            {
1415                                    struct Enc *enc;
1416    
1417                                    enc = &pvar->ssh2_keys[MODE_IN].enc;
1418                                    cipher_init_SSH2(&pvar->evpcip[MODE_IN],
1419                                                     enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher),
1420                                                     enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher),
1421                                                     CIPHER_DECRYPT,
1422                                                     get_cipher_EVP_CIPHER(pvar->crypt_state.sender_cipher),
1423                                                     pvar);
1424    
1425                                    //debug_print(12, enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher));
1426                                    //debug_print(13, enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher));
1427    
1428                                    pvar->crypt_state.decrypt = cArcfour_decrypt;
1429                                    break;
1430                            }
1431    
1432                  case SSH_CIPHER_3DES:{                  case SSH_CIPHER_3DES:{
1433                                  c3DES_init(decryption_key, &pvar->crypt_state.dec.c3DES);                                  c3DES_init(decryption_key, &pvar->crypt_state.dec.c3DES);
1434                                  pvar->crypt_state.decrypt = c3DES_decrypt;                                  pvar->crypt_state.decrypt = c3DES_decrypt;
# Line 1407  static char FAR *get_cipher_name(int cip Line 1520  static char FAR *get_cipher_name(int cip
1520                  return "AES192-CTR";                  return "AES192-CTR";
1521          case SSH2_CIPHER_AES256_CTR:          case SSH2_CIPHER_AES256_CTR:
1522                  return "AES256-CTR";                  return "AES256-CTR";
1523            case SSH2_CIPHER_ARCFOUR:
1524                    return "ARCFOUR";
1525    
1526          default:          default:
1527                  return "Unknown";                  return "Unknown";

Legend:
Removed from v.3159  
changed lines
  Added in v.3168

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26