p += alglen;
key = snew(struct ssh2_userkey);
- /* Add further algorithm names here. */
- if (alglen == 7 && !memcmp(alg, "ssh-rsa", 7))
- key->alg = &ssh_rsa;
- else if (alglen == 7 && !memcmp(alg, "ssh-dss", 7))
- key->alg = &ssh_dss;
- else if (alglen == 19 && memcmp(alg, "ecdsa-sha2-nistp256", 19))
- key->alg = &ssh_ecdsa_nistp256;
- else if (alglen == 19 && memcmp(alg, "ecdsa-sha2-nistp384", 19))
- key->alg = &ssh_ecdsa_nistp384;
- else if (alglen == 19 && memcmp(alg, "ecdsa-sha2-nistp521", 19))
- key->alg = &ssh_ecdsa_nistp521;
- else {
+ key->alg = find_pubkey_alg_len(alglen, alg);
+ if (!key->alg) {
sfree(key);
fail_reason = "algorithm unknown";
goto failure;
int ssh2_save_userkey(const Filename *filename, struct ssh2_userkey *key,
char *passphrase);
const struct ssh_signkey *find_pubkey_alg(const char *name);
+const struct ssh_signkey *find_pubkey_alg_len(int namelen, const char *name);
enum {
SSH_KEYTYPE_UNOPENABLE,
NULL, NULL, NULL
};
-const struct ssh_signkey *find_pubkey_alg(const char *name)
+const struct ssh_signkey *find_pubkey_alg_len(int namelen, const char *name)
{
- if (!strcmp(name, "ssh-rsa"))
+ if (match_ssh_id(namelen, name, "ssh-rsa"))
return &ssh_rsa;
- else if (!strcmp(name, "ssh-dss"))
+ else if (match_ssh_id(namelen, name, "ssh-dss"))
return &ssh_dss;
- else if (!strcmp(name, "ecdsa-sha2-nistp256"))
+ else if (match_ssh_id(namelen, name, "ecdsa-sha2-nistp256"))
return &ssh_ecdsa_nistp256;
- else if (!strcmp(name, "ecdsa-sha2-nistp384"))
+ else if (match_ssh_id(namelen, name, "ecdsa-sha2-nistp384"))
return &ssh_ecdsa_nistp384;
- else if (!strcmp(name, "ecdsa-sha2-nistp521"))
+ else if (match_ssh_id(namelen, name, "ecdsa-sha2-nistp521"))
return &ssh_ecdsa_nistp521;
else
return NULL;
}
+const struct ssh_signkey *find_pubkey_alg(const char *name)
+{
+ return find_pubkey_alg_len(strlen(name), name);
+}
+
struct ssh2_userkey *ssh2_load_userkey(const Filename *filename,
char *passphrase, const char **errorstr)
{