Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/ttssh2/ttxssh/hostkey.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 9255 by nmaya, Wed May 19 14:11:26 2021 UTC revision 10064 by doda, Sun Jul 17 15:39:09 2022 UTC
# Line 32  Line 32 
32    
33    
34  struct ssh2_host_key_t {  struct ssh2_host_key_t {
35            ssh_keyalgo algo;
36          ssh_keytype type;          ssh_keytype type;
37            int digest_type;
38          char *name;          char *name;
39  };  };
40    
41  static const struct ssh2_host_key_t ssh2_host_key[] = {  static const struct ssh2_host_key_t ssh2_host_key[] = {
42          {KEY_RSA1,     "ssh-rsa1"},            // for SSH1 only          {KEY_ALGO_RSA1,     KEY_RSA1,     NID_sha1,   "ssh-rsa1"},            // for SSH1 only
43          {KEY_RSA,      "ssh-rsa"},             // RFC4253          {KEY_ALGO_RSA,      KEY_RSA,      NID_sha1,   "ssh-rsa"},             // RFC4253
44          {KEY_DSA,      "ssh-dss"},             // RFC4253          {KEY_ALGO_DSA,      KEY_DSA,      NID_sha1,   "ssh-dss"},             // RFC4253
45          {KEY_ECDSA256, "ecdsa-sha2-nistp256"}, // RFC5656          {KEY_ALGO_ECDSA256, KEY_ECDSA256, NID_sha256, "ecdsa-sha2-nistp256"}, // RFC5656
46          {KEY_ECDSA384, "ecdsa-sha2-nistp384"}, // RFC5656          {KEY_ALGO_ECDSA384, KEY_ECDSA384, NID_sha384, "ecdsa-sha2-nistp384"}, // RFC5656
47          {KEY_ECDSA521, "ecdsa-sha2-nistp521"}, // RFC5656          {KEY_ALGO_ECDSA521, KEY_ECDSA521, NID_sha512, "ecdsa-sha2-nistp521"}, // RFC5656
48          {KEY_ED25519,  "ssh-ed25519"},         // draft-bjh21-ssh-ed25519-02          {KEY_ALGO_ED25519,  KEY_ED25519,  NID_sha512, "ssh-ed25519"},         // RDC8709
49          {KEY_UNSPEC,   "ssh-unknown"},          {KEY_ALGO_UNSPEC,   KEY_UNSPEC,   NID_undef,  "ssh-unknown"},
50          {KEY_NONE,     NULL},          {KEY_ALGO_NONE,     KEY_NONE,     NID_undef,  NULL},
51  };  };
52    
53  struct ssh_digest_t {  struct ssh_digest_t {
# Line 109  char *get_ssh2_hostkey_type_name_from_ke Line 111  char *get_ssh2_hostkey_type_name_from_ke
111          return get_ssh2_hostkey_type_name(key->type);          return get_ssh2_hostkey_type_name(key->type);
112  }  }
113    
114    char* get_ssh2_keyalgo_name(ssh_keyalgo algo)
115    {
116            const struct ssh2_host_key_t *ptr = ssh2_host_key;
117    
118            while (ptr->name != NULL) {
119                    if (algo == ptr->algo) {
120                            return ptr->name;
121                    }
122                    ptr++;
123            }
124    
125            // not found.
126            return "ssh-unknown";
127    }
128    
129    ssh_keyalgo get_ssh2_keyalgo_from_name(const char *name)
130    {
131            const struct ssh2_host_key_t *ptr = ssh2_host_key;
132    
133            while (ptr->name != NULL) {
134                    if (strcmp(name, ptr->name) == 0) {
135                            return ptr->algo;
136                    }
137                    ptr++;
138            }
139    
140            // not found.
141            return KEY_ALGO_UNSPEC;
142    }
143    
144    int get_ssh2_keyalgo_hashtype(ssh_keyalgo algo)
145    {
146            const struct ssh2_host_key_t *ptr = ssh2_host_key;
147    
148            while (ptr->name != NULL) {
149                    if (algo == ptr->algo) {
150                            return ptr->digest_type;
151                    }
152                    ptr++;
153            }
154    
155            // not found.
156            return NID_sha1;
157    }
158    
159    ssh_keytype get_ssh2_keytype_from_keyalgo(ssh_keyalgo algo)
160    {
161            const struct ssh2_host_key_t *ptr = ssh2_host_key;
162    
163            while (ptr->name != NULL) {
164                    if (algo == ptr->algo) {
165                            return ptr->type;
166                    }
167                    ptr++;
168            }
169    
170            // not found.
171            return KEY_UNSPEC;
172    }
173    
174    const char* get_ssh2_keytype_name_from_keyalgo(ssh_keyalgo algo)
175    {
176            return get_ssh2_hostkey_type_name(get_ssh2_keytype_from_keyalgo(algo));
177    }
178    
179  char* get_digest_algorithm_name(digest_algorithm id)  char* get_digest_algorithm_name(digest_algorithm id)
180  {  {
181          const struct ssh_digest_t *ptr = ssh_digests;          const struct ssh_digest_t *ptr = ssh_digests;
# Line 127  char* get_digest_algorithm_name(digest_a Line 194  char* get_digest_algorithm_name(digest_a
194  void normalize_host_key_order(char *buf)  void normalize_host_key_order(char *buf)
195  {  {
196          static char default_strings[] = {          static char default_strings[] = {
197                  KEY_ECDSA256,                  KEY_ALGO_ECDSA256,
198                  KEY_ECDSA384,                  KEY_ALGO_ECDSA384,
199                  KEY_ECDSA521,                  KEY_ALGO_ECDSA521,
200                  KEY_ED25519,                  KEY_ALGO_ED25519,
201                  KEY_RSA,                  KEY_ALGO_RSA,
202                  KEY_DSA,                  KEY_ALGO_DSA,
203                  KEY_NONE,                  KEY_ALGO_NONE,
204          };          };
205    
206          normalize_generic_order(buf, default_strings, NUM_ELEM(default_strings));          normalize_generic_order(buf, default_strings, NUM_ELEM(default_strings));
207  }  }
208    
209  ssh_keytype choose_SSH2_host_key_algorithm(char *server_proposal, char *my_proposal)  ssh_keyalgo choose_SSH2_host_key_algorithm(char *server_proposal, char *my_proposal)
210  {  {
211          ssh_keytype type = KEY_UNSPEC;          ssh_keytype type = KEY_UNSPEC;
212          char str_keytype[20];          char str_keytype[20];
# Line 147  ssh_keytype choose_SSH2_host_key_algorit Line 214  ssh_keytype choose_SSH2_host_key_algorit
214    
215          choose_SSH2_proposal(server_proposal, my_proposal, str_keytype, sizeof(str_keytype));          choose_SSH2_proposal(server_proposal, my_proposal, str_keytype, sizeof(str_keytype));
216    
217          while (ptr->name != NULL) {          return get_ssh2_keyalgo_from_name(str_keytype);
                 if (strcmp(ptr->name, str_keytype) == 0) {  
                         type = ptr->type;  
                         break;  
                 }  
                 ptr++;  
         }  
   
         return (type);  
218  }  }
219    
220  // Host Keyアルゴリズム優先順位に応じて、myproposal[]を書き換える。  // Host Keyアルゴリズム優先順位に応じて、myproposal[]を書き換える。
# Line 176  void SSH2_update_host_key_myproposal(PTI Line 235  void SSH2_update_host_key_myproposal(PTI
235                  index = pvar->settings.HostKeyOrder[i] - '0';                  index = pvar->settings.HostKeyOrder[i] - '0';
236                  if (index == KEY_NONE) // disabled line                  if (index == KEY_NONE) // disabled line
237                          break;                          break;
238                  strncat_s(buf, sizeof(buf), get_ssh2_hostkey_type_name(index), _TRUNCATE);                  strncat_s(buf, sizeof(buf), get_ssh2_keyalgo_name(index), _TRUNCATE);
239                  strncat_s(buf, sizeof(buf), ",", _TRUNCATE);                  strncat_s(buf, sizeof(buf), ",", _TRUNCATE);
240          }          }
241          len = strlen(buf);          len = strlen(buf);

Legend:
Removed from v.9255  
changed lines
  Added in v.10064

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