version 1.467, 2023/04/12 08:53:54 |
version 1.471, 2023/09/04 10:29:58 |
|
|
#include "ssh-pkcs11.h" |
#include "ssh-pkcs11.h" |
#endif |
#endif |
|
|
#ifdef WITH_OPENSSL |
#define DEFAULT_KEY_TYPE_NAME "ed25519" |
# define DEFAULT_KEY_TYPE_NAME "rsa" |
|
#else |
|
# define DEFAULT_KEY_TYPE_NAME "ed25519" |
|
#endif |
|
|
|
/* |
/* |
* Default number of bits in the RSA, DSA and ECDSA keys. These value can be |
* Default number of bits in the RSA, DSA and ECDSA keys. These value can be |
|
|
char *name = NULL; |
char *name = NULL; |
|
|
if (key_type_name == NULL) |
if (key_type_name == NULL) |
name = _PATH_SSH_CLIENT_ID_RSA; |
name = _PATH_SSH_CLIENT_ID_ED25519; |
else { |
else { |
switch (sshkey_type_from_name(key_type_name)) { |
switch (sshkey_type_from_name(key_type_name)) { |
case KEY_DSA_CERT: |
case KEY_DSA_CERT: |
|
|
* accept a public key prefixed with a hostname or options. |
* accept a public key prefixed with a hostname or options. |
* Try a bare key first, otherwise skip the leading stuff. |
* Try a bare key first, otherwise skip the leading stuff. |
*/ |
*/ |
|
comment = NULL; |
if ((public = try_read_key(&cp)) == NULL) { |
if ((public = try_read_key(&cp)) == NULL) { |
i = strtol(cp, &ep, 10); |
i = strtol(cp, &ep, 10); |
if (i == 0 || ep == NULL || |
if (i == 0 || ep == NULL || |
|
|
if ((r = sshbuf_load_file(path, &krlbuf)) != 0) |
if ((r = sshbuf_load_file(path, &krlbuf)) != 0) |
fatal_r(r, "Unable to load KRL %s", path); |
fatal_r(r, "Unable to load KRL %s", path); |
/* XXX check sigs */ |
/* XXX check sigs */ |
if ((r = ssh_krl_from_blob(krlbuf, krlp, NULL, 0)) != 0 || |
if ((r = ssh_krl_from_blob(krlbuf, krlp)) != 0 || |
*krlp == NULL) |
*krlp == NULL) |
fatal_r(r, "Invalid KRL file %s", path); |
fatal_r(r, "Invalid KRL file %s", path); |
sshbuf_free(krlbuf); |
sshbuf_free(krlbuf); |
|
|
* OpenSSH base64 hashes omit trailing '=' |
* OpenSSH base64 hashes omit trailing '=' |
* characters; put them back for decode. |
* characters; put them back for decode. |
*/ |
*/ |
tlen = strlen(cp); |
if ((tlen = strlen(cp)) >= SIZE_MAX - 5) |
|
fatal_f("hash too long: %zu bytes", tlen); |
tmp = xmalloc(tlen + 4 + 1); |
tmp = xmalloc(tlen + 4 + 1); |
strlcpy(tmp, cp, tlen + 1); |
strlcpy(tmp, cp, tlen + 1); |
while ((tlen % 4) != 0) { |
while ((tlen % 4) != 0) { |
|
|
if (!quiet) |
if (!quiet) |
printf("Revoking from %s\n", path); |
printf("Revoking from %s\n", path); |
while (getline(&line, &linesize, krl_spec) != -1) { |
while (getline(&line, &linesize, krl_spec) != -1) { |
|
if (linesize >= INT_MAX) { |
|
fatal_f("%s contains unparsable line, len=%zu", |
|
path, linesize); |
|
} |
lnum++; |
lnum++; |
was_explicit_key = was_sha1 = was_sha256 = was_hash = 0; |
was_explicit_key = was_sha1 = was_sha256 = was_hash = 0; |
cp = line + strspn(line, " \t"); |
cp = line + strspn(line, " \t"); |
|
|
|
|
if ((kbuf = sshbuf_new()) == NULL) |
if ((kbuf = sshbuf_new()) == NULL) |
fatal("sshbuf_new failed"); |
fatal("sshbuf_new failed"); |
if (ssh_krl_to_blob(krl, kbuf, NULL, 0) != 0) |
if (ssh_krl_to_blob(krl, kbuf) != 0) |
fatal("Couldn't generate KRL"); |
fatal("Couldn't generate KRL"); |
if ((r = sshbuf_write_file(identity_file, kbuf)) != 0) |
if ((r = sshbuf_write_file(identity_file, kbuf)) != 0) |
fatal("write %s: %s", identity_file, strerror(errno)); |
fatal("write %s: %s", identity_file, strerror(errno)); |