[Ttssh2-commit] [5534] 接続処理の ED25519 対応を更新中。

アーカイブの一覧に戻る

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,



Ttssh2-commit メーリングリストの案内
アーカイブの一覧に戻る