svnno****@sourc*****
svnno****@sourc*****
2014年 3月 14日 (金) 00:39:49 JST
Revision: 5534 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/5534 Author: yutakapon Date: 2014-03-14 00:39:48 +0900 (Fri, 14 Mar 2014) Log Message: ----------- 接続処理の ED25519 対応を更新中。 CDCまで。 Modified Paths: -------------- branches/ssh_ed25519/ttssh2/ttxssh/hosts.c branches/ssh_ed25519/ttssh2/ttxssh/key.c branches/ssh_ed25519/ttssh2/ttxssh/key.h branches/ssh_ed25519/ttssh2/ttxssh/ttxssh.c -------------- next part -------------- Modified: branches/ssh_ed25519/ttssh2/ttxssh/hosts.c =================================================================== --- branches/ssh_ed25519/ttssh2/ttxssh/hosts.c 2014-03-12 16:11:13 UTC (rev 5533) +++ branches/ssh_ed25519/ttssh2/ttxssh/hosts.c 2014-03-13 15:39:48 UTC (rev 5534) @@ -791,6 +791,7 @@ unsigned char FAR * mod; const EC_GROUP *group; const EC_POINT *pa, *pb; + Key *a, *b; if (pvar->hosts_state.hostkey.type != key->type) { return -1; @@ -833,6 +834,12 @@ pb = EC_KEY_get0_public_key(pvar->hosts_state.hostkey.ecdsa); return EC_POINT_cmp(group, pa, pb, NULL) == 0; + case KEY_ED25519: + a = key; + b = &pvar->hosts_state.hostkey; + return a->ed25519_pk != NULL && b->ed25519_pk != NULL && + memcmp(a->ed25519_pk, b->ed25519_pk, ED25519_PK_SZ) == 0; + default: return FALSE; } @@ -943,6 +950,7 @@ case KEY_ECDSA256: case KEY_ECDSA384: case KEY_ECDSA521: + case KEY_ED25519: { Key *key = &pvar->hosts_state.hostkey; char *blob = NULL; @@ -1108,6 +1116,7 @@ } // \x90ڑ\xB1\x92\x86\x82̃T\x81[\x83o\x82̃L\x81[\x82\xF0\x93ǂݍ\x9E\x82\xDE + memset(&key, 0, sizeof(key)); switch (pvar->hosts_state.hostkey.type) { case KEY_RSA1: // SSH1 key.type = KEY_RSA1; @@ -1129,6 +1138,10 @@ key.type = pvar->hosts_state.hostkey.type; key.ecdsa = EC_KEY_dup(pvar->hosts_state.hostkey.ecdsa); break; + case KEY_ED25519: + key.type = pvar->hosts_state.hostkey.type; + key.ed25519_pk = duplicate_ED25519_PK(pvar->hosts_state.hostkey.ed25519_pk); + break; } // \x83t\x83@\x83C\x83\x8B\x82\xA9\x82\xE7\x93ǂݍ\x9E\x82\xDE @@ -1263,6 +1276,9 @@ _unlink(filename); finish_read_host_files(pvar, 0); + + // \x8DŌ\xE3\x82Ƀ\x81\x83\x82\x83\x8A\x82\xF0\x89\xF0\x95\xFA\x82\xB5\x82Ă\xA8\x82\xAD\x81B + key_free(&key); } } @@ -1815,6 +1831,9 @@ case KEY_ECDSA521: pvar->hosts_state.hostkey.ecdsa = EC_KEY_dup(key->ecdsa); break; + case KEY_ED25519: + pvar->hosts_state.hostkey.ed25519_pk = duplicate_ED25519_PK(key->ed25519_pk); + break; } free(pvar->hosts_state.prefetched_hostname); pvar->hosts_state.prefetched_hostname = _strdup(hostname); Modified: branches/ssh_ed25519/ttssh2/ttxssh/key.c =================================================================== --- branches/ssh_ed25519/ttssh2/ttxssh/key.c 2014-03-12 16:11:13 UTC (rev 5533) +++ branches/ssh_ed25519/ttssh2/ttxssh/key.c 2014-03-13 15:39:48 UTC (rev 5534) @@ -369,6 +369,9 @@ case KEY_ECDSA521: ret = ssh_ecdsa_verify(key->ecdsa, key->type, signature, signaturelen, data, datalen); break; + case KEY_ED25519: + // \x82܂\xBE + break; default: return -1; } @@ -434,7 +437,18 @@ return (dsa); } +unsigned char *duplicate_ED25519_PK(unsigned char *src) +{ + unsigned char *ptr = NULL; + ptr = malloc(ED25519_PK_SZ); + if (ptr) { + memcpy(ptr, src, ED25519_PK_SZ); + } + return (ptr); +} + + char* key_fingerprint_raw(Key *k, enum fp_type dgst_type, int *dgst_raw_length) { const EVP_MD *md = NULL; @@ -481,6 +495,7 @@ case KEY_ECDSA256: case KEY_ECDSA384: case KEY_ECDSA521: + case KEY_ED25519: key_to_blob(k, &blob, &len); break; @@ -547,6 +562,8 @@ return 384; case KEY_ECDSA521: return 521; + case KEY_ED25519: + return 256; /* XXX */ } return 0; } @@ -960,6 +977,10 @@ hostkey->ecdsa = ecdsa; break; + case KEY_ED25519: + // \x82܂\xBE + break; + default: // unknown key goto error; } @@ -1145,6 +1166,11 @@ break; } + + case KEY_ED25519: + // \x82܂\xBE + break; + default: buffer_free(msg); return FALSE; Modified: branches/ssh_ed25519/ttssh2/ttxssh/key.h =================================================================== --- branches/ssh_ed25519/ttssh2/ttxssh/key.h 2014-03-12 16:11:13 UTC (rev 5533) +++ branches/ssh_ed25519/ttssh2/ttxssh/key.h 2014-03-13 15:39:48 UTC (rev 5534) @@ -40,6 +40,7 @@ unsigned char *data, unsigned int datalen); RSA *duplicate_RSA(RSA *src); DSA *duplicate_DSA(DSA *src); +unsigned char *duplicate_ED25519_PK(unsigned char *src); char *key_fingerprint_raw(Key *k, enum fp_type dgst_type, int *dgst_raw_length); char *key_fingerprint(Key *key, enum fp_rep dgst_rep); Modified: branches/ssh_ed25519/ttssh2/ttxssh/ttxssh.c =================================================================== --- branches/ssh_ed25519/ttssh2/ttxssh/ttxssh.c 2014-03-12 16:11:13 UTC (rev 5533) +++ branches/ssh_ed25519/ttssh2/ttxssh/ttxssh.c 2014-03-13 15:39:48 UTC (rev 5534) @@ -288,6 +288,7 @@ KEY_ECDSA256, KEY_ECDSA384, KEY_ECDSA521, + KEY_ED25519, KEY_RSA, KEY_DSA, KEY_NONE,