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 4313 by maya, Wed Feb 16 15:48:49 2011 UTC revision 4433 by doda, Mon Apr 11 00:29:12 2011 UTC
# Line 647  error: Line 647  error:
647          free(newbuf);          free(newbuf);
648  }  }
649    
650    #ifdef WITH_CAMELLIA_DRAFT
651    static void cCamellia_encrypt(PTInstVar pvar, unsigned char FAR * buf,
652                                 int bytes)
653    {
654            unsigned char *newbuf = malloc(bytes);
655            int block_size = pvar->ssh2_keys[MODE_OUT].enc.block_size;
656            char tmp[80];
657    
658            // 事前復号化により、全ペイロードが復号化されている場合は、0バイトになる。(2004.11.7 yutaka)
659            if (bytes == 0)
660                    goto error;
661    
662            if (newbuf == NULL)
663                    return;
664    
665            if (bytes % block_size) {
666                    UTIL_get_lang_msg("MSG_ENCRYPT_ERROR1", pvar,
667                                      "%s encrypt error(1): bytes %d (%d)");
668                    _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg,
669                                "Camellia128/192/256", bytes, block_size);
670                    notify_fatal_error(pvar, tmp);
671                    goto error;
672            }
673    
674            if (EVP_Cipher(&pvar->evpcip[MODE_OUT], newbuf, buf, bytes) == 0) {
675                    UTIL_get_lang_msg("MSG_ENCRYPT_ERROR2", pvar, "%s encrypt error(2)");
676                    _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg,
677                                "Camellia128/192/256");
678                    notify_fatal_error(pvar, tmp);
679                    goto error;
680    
681            } else {
682                    memcpy(buf, newbuf, bytes);
683    
684            }
685    
686    error:
687            free(newbuf);
688    }
689    
690    static void cCamellia_decrypt(PTInstVar pvar, unsigned char FAR * buf,
691                                 int bytes)
692    {
693            unsigned char *newbuf = malloc(bytes);
694            int block_size = pvar->ssh2_keys[MODE_IN].enc.block_size;
695            char tmp[80];
696    
697            // 事前復号化により、全ペイロードが復号化されている場合は、0バイトになる。(2004.11.7 yutaka)
698            if (bytes == 0)
699                    goto error;
700    
701            if (newbuf == NULL)
702                    return;
703    
704            if (bytes % block_size) {
705                    UTIL_get_lang_msg("MSG_DECRYPT_ERROR1", pvar,
706                                      "%s decrypt error(1): bytes %d (%d)");
707                    _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg,
708                                "Camellia128/192/256", bytes, block_size);
709                    notify_fatal_error(pvar, tmp);
710                    goto error;
711            }
712    
713            if (EVP_Cipher(&pvar->evpcip[MODE_IN], newbuf, buf, bytes) == 0) {
714                    UTIL_get_lang_msg("MSG_DECRYPT_ERROR2", pvar, "%s decrypt error(2)");
715                    _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg,
716                                "Camellia128/192/256");
717                    notify_fatal_error(pvar, tmp);
718                    goto error;
719    
720            } else {
721                    memcpy(buf, newbuf, bytes);
722    
723            }
724    
725    error:
726            free(newbuf);
727    }
728    #endif // WITH_CAMELLIA_DRAFT
729    
730  static void c3DES_encrypt(PTInstVar pvar, unsigned char FAR * buf,  static void c3DES_encrypt(PTInstVar pvar, unsigned char FAR * buf,
731                            int bytes)                            int bytes)
# Line 868  BOOL CRYPT_set_supported_ciphers(PTInstV Line 947  BOOL CRYPT_set_supported_ciphers(PTInstV
947    
948          } else { // for SSH2(yutaka)          } else { // for SSH2(yutaka)
949                  // SSH2がサポートするデータ通信用アルゴリズム(公開鍵交換用とは別)                  // SSH2がサポートするデータ通信用アルゴリズム(公開鍵交換用とは別)
950                  cipher_mask = (1 << SSH2_CIPHER_3DES_CBC)                  cipher_mask =((1 << SSH2_CIPHER_3DES_CBC)
951                              | (1 << SSH2_CIPHER_AES128_CBC)                              | (1 << SSH2_CIPHER_AES128_CBC)
952                              | (1 << SSH2_CIPHER_AES192_CBC)                              | (1 << SSH2_CIPHER_AES192_CBC)
953                              | (1 << SSH2_CIPHER_AES256_CBC)                              | (1 << SSH2_CIPHER_AES256_CBC)
# Line 882  BOOL CRYPT_set_supported_ciphers(PTInstV Line 961  BOOL CRYPT_set_supported_ciphers(PTInstV
961                              | (1 << SSH2_CIPHER_CAST128_CBC)                              | (1 << SSH2_CIPHER_CAST128_CBC)
962                              | (1 << SSH2_CIPHER_3DES_CTR)                              | (1 << SSH2_CIPHER_3DES_CTR)
963                              | (1 << SSH2_CIPHER_BLOWFISH_CTR)                              | (1 << SSH2_CIPHER_BLOWFISH_CTR)
964                              | (1 << SSH2_CIPHER_CAST128_CTR);                              | (1 << SSH2_CIPHER_CAST128_CTR)
965    #ifdef WITH_CAMELLIA_DRAFT
966                                | (1 << SSH2_CIPHER_CAMELLIA128_CBC)
967                                | (1 << SSH2_CIPHER_CAMELLIA192_CBC)
968                                | (1 << SSH2_CIPHER_CAMELLIA256_CBC)
969                                | (1 << SSH2_CIPHER_CAMELLIA128_CTR)
970                                | (1 << SSH2_CIPHER_CAMELLIA192_CTR)
971                                | (1 << SSH2_CIPHER_CAMELLIA256_CTR)
972    #endif // WITH_CAMELLIA_DRAFT
973                    );
974          }          }
975    
976          sender_ciphers &= cipher_mask;          sender_ciphers &= cipher_mask;
# Line 1455  BOOL CRYPT_start_encryption(PTInstVar pv Line 1543  BOOL CRYPT_start_encryption(PTInstVar pv
1543                                  break;                                  break;
1544                          }                          }
1545    
1546    #ifdef WITH_CAMELLIA_DRAFT
1547                    case SSH2_CIPHER_CAMELLIA128_CBC:
1548                    case SSH2_CIPHER_CAMELLIA192_CBC:
1549                    case SSH2_CIPHER_CAMELLIA256_CBC:
1550                    case SSH2_CIPHER_CAMELLIA128_CTR:
1551                    case SSH2_CIPHER_CAMELLIA192_CTR:
1552                    case SSH2_CIPHER_CAMELLIA256_CTR:
1553                            {
1554                                    struct Enc *enc;
1555    
1556                                    enc = &pvar->ssh2_keys[MODE_OUT].enc;
1557                                    cipher_init_SSH2(&pvar->evpcip[MODE_OUT],
1558                                                     enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher),
1559                                                     enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher),
1560                                                     CIPHER_ENCRYPT,
1561                                                     get_cipher_EVP_CIPHER(pvar->crypt_state.sender_cipher),
1562                                                     get_cipher_discard_len(pvar->crypt_state.sender_cipher),
1563                                                     pvar);
1564    
1565                                    //debug_print(10, enc->key, get_cipher_key_len(pvar->crypt_state.sender_cipher));
1566                                    //debug_print(11, enc->iv, get_cipher_block_size(pvar->crypt_state.sender_cipher));
1567    
1568                                    pvar->crypt_state.encrypt = cCamellia_encrypt;
1569                                    break;
1570                            }
1571    #endif // WITH_CAMELLIA_DRAFT
1572    
1573                  case SSH_CIPHER_3DES:{                  case SSH_CIPHER_3DES:{
1574                                  c3DES_init(encryption_key, &pvar->crypt_state.enc.c3DES);                                  c3DES_init(encryption_key, &pvar->crypt_state.enc.c3DES);
1575                                  pvar->crypt_state.encrypt = c3DES_encrypt;                                  pvar->crypt_state.encrypt = c3DES_encrypt;
# Line 1602  BOOL CRYPT_start_encryption(PTInstVar pv Line 1717  BOOL CRYPT_start_encryption(PTInstVar pv
1717                                  break;                                  break;
1718                          }                          }
1719    
1720    #ifdef WITH_CAMELLIA_DRAFT
1721                    case SSH2_CIPHER_CAMELLIA128_CBC:
1722                    case SSH2_CIPHER_CAMELLIA192_CBC:
1723                    case SSH2_CIPHER_CAMELLIA256_CBC:
1724                    case SSH2_CIPHER_CAMELLIA128_CTR:
1725                    case SSH2_CIPHER_CAMELLIA192_CTR:
1726                    case SSH2_CIPHER_CAMELLIA256_CTR:
1727                            {
1728                                    struct Enc *enc;
1729    
1730                                    enc = &pvar->ssh2_keys[MODE_IN].enc;
1731                                    cipher_init_SSH2(&pvar->evpcip[MODE_IN],
1732                                                     enc->key, get_cipher_key_len(pvar->crypt_state.receiver_cipher),
1733                                                     enc->iv, get_cipher_block_size(pvar->crypt_state.receiver_cipher),
1734                                                     CIPHER_DECRYPT,
1735                                                     get_cipher_EVP_CIPHER(pvar->crypt_state.receiver_cipher),
1736                                                     get_cipher_discard_len(pvar->crypt_state.receiver_cipher),
1737                                                     pvar);
1738    
1739                                    //debug_print(12, enc->key, get_cipher_key_len(pvar->crypt_state.receiver_cipher));
1740                                    //debug_print(13, enc->iv, get_cipher_block_size(pvar->crypt_state.receiver_cipher));
1741    
1742                                    pvar->crypt_state.decrypt = cCamellia_decrypt;
1743                                    break;
1744                            }
1745    #endif // WITH_CAMELLIA_DRAFT
1746    
1747                  case SSH_CIPHER_3DES:{                  case SSH_CIPHER_3DES:{
1748                                  c3DES_init(decryption_key, &pvar->crypt_state.dec.c3DES);                                  c3DES_init(decryption_key, &pvar->crypt_state.dec.c3DES);
1749                                  pvar->crypt_state.decrypt = c3DES_decrypt;                                  pvar->crypt_state.decrypt = c3DES_decrypt;
# Line 1707  static char FAR *get_cipher_name(int cip Line 1849  static char FAR *get_cipher_name(int cip
1849                  return "Blowfish-CTR";                  return "Blowfish-CTR";
1850          case SSH2_CIPHER_CAST128_CTR:          case SSH2_CIPHER_CAST128_CTR:
1851                  return "CAST-128-CTR";                  return "CAST-128-CTR";
1852    #ifdef WITH_CAMELLIA_DRAFT
1853            case SSH2_CIPHER_CAMELLIA128_CBC:
1854                    return "Camellia128-CBC";
1855            case SSH2_CIPHER_CAMELLIA192_CBC:
1856                    return "Camellia192-CBC";
1857            case SSH2_CIPHER_CAMELLIA256_CBC:
1858                    return "Camellia256-CBC";
1859            case SSH2_CIPHER_CAMELLIA128_CTR:
1860                    return "Camellia128-CTR";
1861            case SSH2_CIPHER_CAMELLIA192_CTR:
1862                    return "Camellia192-CTR";
1863            case SSH2_CIPHER_CAMELLIA256_CTR:
1864                    return "Camellia256-CTR";
1865    #endif // WITH_CAMELLIA_DRAFT
1866    
1867          default:          default:
1868                  return "Unknown";                  return "Unknown";

Legend:
Removed from v.4313  
changed lines
  Added in v.4433

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