Browse Subversion Repository
Diff of /branches/ssh_chacha20poly1305/ttssh2/ttxssh/ssh.c
Parent Directory
| Revision Log
| Patch
| 3112 |
// クライアントからサーバへの提案事項 |
// クライアントからサーバへの提案事項 |
| 3113 |
#ifdef SSH2_DEBUG |
#ifdef SSH2_DEBUG |
| 3114 |
static char *myproposal[PROPOSAL_MAX] = { |
static char *myproposal[PROPOSAL_MAX] = { |
| 3115 |
"diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1", |
// "diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1", |
| 3116 |
// "diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1", |
"diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1", |
| 3117 |
"ssh-rsa,ssh-dss", |
// "ssh-rsa,ssh-dss", |
| 3118 |
// "ssh-dss,ssh-rsa", |
"ssh-dss,ssh-rsa", |
| 3119 |
"3des-cbc,aes128-cbc", |
"3des-cbc,aes128-cbc", |
| 3120 |
"3des-cbc,aes128-cbc", |
"3des-cbc,aes128-cbc", |
| 3121 |
"hmac-md5,hmac-sha1", |
"hmac-md5,hmac-sha1", |
| 4557 |
} |
} |
| 4558 |
|
|
| 4559 |
|
|
| 4560 |
|
static char* key_fingerprint_raw(Key *k, int *dgst_raw_length) |
| 4561 |
|
{ |
| 4562 |
|
const EVP_MD *md = NULL; |
| 4563 |
|
EVP_MD_CTX ctx; |
| 4564 |
|
char *blob = NULL; |
| 4565 |
|
char *retval = NULL; |
| 4566 |
|
int len = 0; |
| 4567 |
|
int nlen, elen; |
| 4568 |
|
RSA *rsa; |
| 4569 |
|
|
| 4570 |
|
*dgst_raw_length = 0; |
| 4571 |
|
|
| 4572 |
|
// MD5アルゴリズムを使用する |
| 4573 |
|
md = EVP_md5(); |
| 4574 |
|
|
| 4575 |
|
switch (k->type) { |
| 4576 |
|
case KEY_RSA1: |
| 4577 |
|
rsa = make_key(NULL, k->bits, k->exp, k->mod); |
| 4578 |
|
nlen = BN_num_bytes(rsa->n); |
| 4579 |
|
elen = BN_num_bytes(rsa->e); |
| 4580 |
|
len = nlen + elen; |
| 4581 |
|
blob = malloc(len); |
| 4582 |
|
if (blob == NULL) { |
| 4583 |
|
// TODO: |
| 4584 |
|
} |
| 4585 |
|
BN_bn2bin(rsa->n, blob); |
| 4586 |
|
BN_bn2bin(rsa->e, blob + nlen); |
| 4587 |
|
RSA_free(rsa); |
| 4588 |
|
break; |
| 4589 |
|
|
| 4590 |
|
case KEY_DSA: |
| 4591 |
|
case KEY_RSA: |
| 4592 |
|
key_to_blob(k, &blob, &len); |
| 4593 |
|
break; |
| 4594 |
|
|
| 4595 |
|
case KEY_UNSPEC: |
| 4596 |
|
return retval; |
| 4597 |
|
break; |
| 4598 |
|
|
| 4599 |
|
default: |
| 4600 |
|
//fatal("key_fingerprint_raw: bad key type %d", k->type); |
| 4601 |
|
break; |
| 4602 |
|
} |
| 4603 |
|
|
| 4604 |
|
if (blob != NULL) { |
| 4605 |
|
retval = malloc(EVP_MAX_MD_SIZE); |
| 4606 |
|
if (retval == NULL) { |
| 4607 |
|
// TODO: |
| 4608 |
|
} |
| 4609 |
|
EVP_DigestInit(&ctx, md); |
| 4610 |
|
EVP_DigestUpdate(&ctx, blob, len); |
| 4611 |
|
EVP_DigestFinal(&ctx, retval, dgst_raw_length); |
| 4612 |
|
memset(blob, 0, len); |
| 4613 |
|
free(blob); |
| 4614 |
|
} else { |
| 4615 |
|
//fatal("key_fingerprint_raw: blob is null"); |
| 4616 |
|
} |
| 4617 |
|
return retval; |
| 4618 |
|
} |
| 4619 |
|
|
| 4620 |
|
|
| 4621 |
|
// |
| 4622 |
|
// fingerprint(指紋:ホスト公開鍵のハッシュ)を生成する |
| 4623 |
|
// |
| 4624 |
|
char *key_fingerprint(Key *key) |
| 4625 |
|
{ |
| 4626 |
|
char *retval = NULL; |
| 4627 |
|
unsigned char *dgst_raw; |
| 4628 |
|
int dgst_raw_len; |
| 4629 |
|
int i; |
| 4630 |
|
|
| 4631 |
|
// fingerprintのハッシュ値(バイナリ)を求める |
| 4632 |
|
dgst_raw = key_fingerprint_raw(key, &dgst_raw_len); |
| 4633 |
|
|
| 4634 |
|
// 16進表記へ変換する |
| 4635 |
|
retval = malloc(dgst_raw_len * 3 + 1); |
| 4636 |
|
retval[0] = '\0'; |
| 4637 |
|
for (i = 0; i < dgst_raw_len; i++) { |
| 4638 |
|
char hex[4]; |
| 4639 |
|
_snprintf(hex, sizeof(hex), "%02x:", dgst_raw[i]); |
| 4640 |
|
strcat(retval, hex); // TODO: 代わりに strcat_s() を使うか? |
| 4641 |
|
} |
| 4642 |
|
|
| 4643 |
|
/* Remove the trailing ':' character */ |
| 4644 |
|
retval[(dgst_raw_len * 3) - 1] = '\0'; |
| 4645 |
|
|
| 4646 |
|
memset(dgst_raw, 0, dgst_raw_len); |
| 4647 |
|
free(dgst_raw); |
| 4648 |
|
|
| 4649 |
|
return (retval); |
| 4650 |
|
} |
| 4651 |
|
|
| 4652 |
|
|
| 4653 |
// |
// |
| 4654 |
// キーのメモリ領域解放 |
// キーのメモリ領域解放 |
| 4655 |
// |
// |
| 6814 |
|
|
| 6815 |
/* |
/* |
| 6816 |
* $Log: not supported by cvs2svn $ |
* $Log: not supported by cvs2svn $ |
| 6817 |
|
* Revision 1.41 2006/03/26 15:43:58 yutakakn |
| 6818 |
|
* SSH2のknown_hosts対応を追加した。 |
| 6819 |
|
* |
| 6820 |
* Revision 1.40 2006/03/06 14:43:49 yutakakn |
* Revision 1.40 2006/03/06 14:43:49 yutakakn |
| 6821 |
* SSH2ウィンドウ制御の見直しにより、スループットを向上させた。 |
* SSH2ウィンドウ制御の見直しにより、スループットを向上させた。 |
| 6822 |
* |
* |
|
|
Legend:
| Removed from v.2856 |
|
| changed lines |
| |
Added in v.2857 |
|
|
| |