| 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) |
| 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) |
| 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; |
| 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; |
| 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; |
| 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"; |