Skip to content

Commit 68177b7

Browse files
committed
server session CHANGE support for PKCS#8 keys
Refs #224
1 parent 4df0561 commit 68177b7

2 files changed

Lines changed: 26 additions & 13 deletions

File tree

src/session_server.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,8 @@ void nc_server_ssh_set_interactive_auth_clb(int (*interactive_auth_clb)(const st
581581
* to be set. The one set will be freed.
582582
* - \p privkey_path expects a PEM file,
583583
* - \p privkey_data expects a base-64 encoded ANS.1 DER data,
584-
* - \p privkey_type type of the key in \p privkey_data.
584+
* - \p privkey_type type of the key in \p privkey_data. Use ::NC_SSH_KEY_UNKNOWN for
585+
* PKCS#8 key that includes the information about the key in its data.
585586
* @param[in] user_data Optional arbitrary user data that will be passed to \p hostkey_clb.
586587
* @param[in] free_user_data Optional callback that will be called during cleanup to free any \p user_data.
587588
*/

src/session_server_ssh.c

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -69,18 +69,30 @@ base64der_key_to_tmp_file(const char *in, const char *key_str)
6969
}
7070

7171
/* write the key into the file */
72-
written = fwrite("-----BEGIN ", 1, 11, file);
73-
written += fwrite(key_str, 1, strlen(key_str), file);
74-
written += fwrite(" PRIVATE KEY-----\n", 1, 18, file);
75-
written += fwrite(in, 1, strlen(in), file);
76-
written += fwrite("\n-----END ", 1, 10, file);
77-
written += fwrite(key_str, 1, strlen(key_str), file);
78-
written += fwrite(" PRIVATE KEY-----", 1, 17, file);
79-
80-
fclose(file);
81-
if ((unsigned)written != 11 + strlen(key_str) + 18 + strlen(in) + 10 + strlen(key_str) + 17) {
82-
unlink(path);
83-
return NULL;
72+
if (key_str) {
73+
written = fwrite("-----BEGIN ", 1, 11, file);
74+
written += fwrite(key_str, 1, strlen(key_str), file);
75+
written += fwrite(" PRIVATE KEY-----\n", 1, 18, file);
76+
written += fwrite(in, 1, strlen(in), file);
77+
written += fwrite("\n-----END ", 1, 10, file);
78+
written += fwrite(key_str, 1, strlen(key_str), file);
79+
written += fwrite(" PRIVATE KEY-----", 1, 17, file);
80+
81+
fclose(file);
82+
if ((unsigned)written != 11 + strlen(key_str) + 18 + strlen(in) + 10 + strlen(key_str) + 17) {
83+
unlink(path);
84+
return NULL;
85+
}
86+
} else {
87+
written = fwrite("-----BEGIN PRIVATE KEY-----\n", 1, 28, file);
88+
written += fwrite(in, 1, strlen(in), file);
89+
written += fwrite("\n-----END PRIVATE KEY-----", 1, 26, file);
90+
91+
fclose(file);
92+
if ((unsigned)written != 28 + strlen(in) + 26) {
93+
unlink(path);
94+
return NULL;
95+
}
8496
}
8597

8698
return strdup(path);

0 commit comments

Comments
 (0)