mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-07-31 00:03:07 +03:00
examples: Demonstrate export of different key formats
Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
@ -38,6 +38,7 @@ struct arguments_st {
|
|||||||
unsigned long bits;
|
unsigned long bits;
|
||||||
char *file;
|
char *file;
|
||||||
char *passphrase;
|
char *passphrase;
|
||||||
|
char *format;
|
||||||
int action_list;
|
int action_list;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -96,6 +97,16 @@ static struct argp_option options[] = {
|
|||||||
.doc = "List the Fingerprint of the given key\n",
|
.doc = "List the Fingerprint of the given key\n",
|
||||||
.group = 0
|
.group = 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "format",
|
||||||
|
.key = 'm',
|
||||||
|
.arg = "FORMAT",
|
||||||
|
.flags = 0,
|
||||||
|
.doc = "Write the file in specific format. The supported values are "
|
||||||
|
"'PEM'and 'OpenSSH' file format. By default Ed25519 "
|
||||||
|
"keys are exported in OpenSSH format and others in PEM.\n",
|
||||||
|
.group = 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
/* End of the options */
|
/* End of the options */
|
||||||
0
|
0
|
||||||
@ -168,6 +179,9 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state)
|
|||||||
case 'l':
|
case 'l':
|
||||||
arguments->action_list = 1;
|
arguments->action_list = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'm':
|
||||||
|
arguments->format = strdup(arg);
|
||||||
|
break;
|
||||||
case ARGP_KEY_ARG:
|
case ARGP_KEY_ARG:
|
||||||
if (state->arg_num > 0) {
|
if (state->arg_num > 0) {
|
||||||
/* Too many arguments. */
|
/* Too many arguments. */
|
||||||
@ -382,8 +396,36 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Write the private key */
|
/* Write the private key */
|
||||||
rc = ssh_pki_export_privkey_file(key, arguments.passphrase, NULL, NULL,
|
if (arguments.format != NULL) {
|
||||||
arguments.file);
|
if (strcasecmp(arguments.format, "PEM") == 0) {
|
||||||
|
rc = ssh_pki_export_privkey_file_format(key,
|
||||||
|
arguments.passphrase,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
arguments.file,
|
||||||
|
SSH_FILE_FORMAT_PEM);
|
||||||
|
} else if (strcasecmp(arguments.format, "OpenSSH") == 0) {
|
||||||
|
rc = ssh_pki_export_privkey_file_format(key,
|
||||||
|
arguments.passphrase,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
arguments.file,
|
||||||
|
SSH_FILE_FORMAT_OPENSSH);
|
||||||
|
} else {
|
||||||
|
rc = ssh_pki_export_privkey_file_format(key,
|
||||||
|
arguments.passphrase,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
arguments.file,
|
||||||
|
SSH_FILE_FORMAT_DEFAULT);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
rc = ssh_pki_export_privkey_file(key,
|
||||||
|
arguments.passphrase,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
arguments.file);
|
||||||
|
}
|
||||||
if (rc != SSH_OK) {
|
if (rc != SSH_OK) {
|
||||||
fprintf(stderr, "Error: Failed to write private key file");
|
fprintf(stderr, "Error: Failed to write private key file");
|
||||||
goto end;
|
goto end;
|
||||||
|
Reference in New Issue
Block a user