ssh_key_parse.h
Go to the documentation of this file.
1 /**
2  * @file ssh_key_parse.h
3  * @brief SSH key parsing
4  *
5  * @section License
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  *
9  * Copyright (C) 2019-2026 Oryx Embedded SARL. All rights reserved.
10  *
11  * This file is part of CycloneSSH Open.
12  *
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License
15  * as published by the Free Software Foundation; either version 2
16  * of the License, or (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software Foundation,
25  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
26  *
27  * @author Oryx Embedded SARL (www.oryx-embedded.com)
28  * @version 2.6.4
29  **/
30 
31 #ifndef _SSH_KEY_PARSE_H
32 #define _SSH_KEY_PARSE_H
33 
34 //Dependencies
35 #include "ssh_types.h"
36 
37 //Magic identifier size
38 #define SSH_AUTH_MAGIC_SIZE 15
39 
40 
41 //C++ guard
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
46 
47 /**
48  * @brief RSA host key
49  **/
50 
51 typedef struct
52 {
57 
58 
59 /**
60  * @brief DSA host key
61  **/
62 
63 typedef struct
64 {
71 
72 
73 /**
74  * @brief ECDSA host key
75  **/
76 
77 typedef struct
78 {
83 
84 
85 /**
86  * @brief EdDSA host key
87  **/
88 
89 typedef struct
90 {
94 
95 
96 /**
97  * @brief ML-DSA host key
98  **/
99 
100 typedef struct
101 {
105 
106 
107 /**
108  * @brief Private key header (OpenSSH format)
109  **/
110 
111 typedef struct
112 {
116  uint32_t numKeys;
120 
121 
122 /**
123  * @brief RSA private key (OpenSSH format)
124  **/
125 
126 typedef struct
127 {
128  uint32_t checkInt1;
129  uint32_t checkInt2;
139 
140 
141 /**
142  * @brief DSA private key (OpenSSH format)
143  **/
144 
145 typedef struct
146 {
147  uint32_t checkInt1;
148  uint32_t checkInt2;
157 
158 
159 /**
160  * @brief ECDSA private key (OpenSSH format)
161  **/
162 
163 typedef struct
164 {
165  uint32_t checkInt1;
166  uint32_t checkInt2;
173 
174 
175 /**
176  * @brief EdDSA private key (OpenSSH format)
177  **/
178 
179 typedef struct
180 {
181  uint32_t checkInt1;
182  uint32_t checkInt2;
188 
189 
190 //SSH key parsing functions
191 error_t sshParseHostKey(const uint8_t *data, size_t length,
192  SshString *keyFormatId);
193 
194 error_t sshParseRsaHostKey(const uint8_t *data, size_t length,
195  SshRsaHostKey *hostKey);
196 
197 error_t sshParseDsaHostKey(const uint8_t *data, size_t length,
198  SshDsaHostKey *hostKey);
199 
200 error_t sshParseEcdsaHostKey(const uint8_t *data, size_t length,
201  SshEcdsaHostKey *hostKey);
202 
203 error_t sshParseEd25519HostKey(const uint8_t *data, size_t length,
204  SshEddsaHostKey *hostKey);
205 
206 error_t sshParseEd448HostKey(const uint8_t *data, size_t length,
207  SshEddsaHostKey *hostKey);
208 
209 error_t sshParseMldsaHostKey(const uint8_t *data, size_t length,
210  SshMldsaHostKey *hostKey);
211 
212 error_t sshParseOpenSshPrivateKeyHeader(const uint8_t *data, size_t length,
213  SshPrivateKeyHeader *privateKeyHeader);
214 
215 error_t sshParseOpenSshRsaPrivateKey(const uint8_t *data, size_t length,
216  SshRsaPrivateKey *privateKey);
217 
218 error_t sshParseOpenSshDsaPrivateKey(const uint8_t *data, size_t length,
219  SshDsaPrivateKey *privateKey);
220 
221 error_t sshParseOpenSshEcdsaPrivateKey(const uint8_t *data, size_t length,
222  SshEcdsaPrivateKey *privateKey);
223 
224 error_t sshParseOpenSshEd25519PrivateKey(const uint8_t *data, size_t length,
225  SshEddsaPrivateKey *privateKey);
226 
227 error_t sshParseOpenSshEd448PrivateKey(const uint8_t *data, size_t length,
228  SshEddsaPrivateKey *privateKey);
229 
230 error_t sshCheckPrivateKeyPadding(const uint8_t *pad, size_t length);
231 
232 //C++ guard
233 #ifdef __cplusplus
234 }
235 #endif
236 
237 #endif
EdDSA private key (OpenSSH format)
SshBinaryString q
Definition: ssh_key_parse.h:67
SshBinaryString y
Definition: ssh_key_parse.h:69
SshBinaryString q
error_t sshParseMldsaHostKey(const uint8_t *data, size_t length, SshMldsaHostKey *hostKey)
Parse an ML-DSA host key structure.
Binary string.
Definition: ssh_types.h:67
error_t sshParseEd448HostKey(const uint8_t *data, size_t length, SshEddsaHostKey *hostKey)
Parse an Ed448 host key structure.
DSA host key.
Definition: ssh_key_parse.h:64
SshString keyFormatId
Definition: ssh_key_parse.h:65
SshBinaryString d
ECDSA private key (OpenSSH format)
error_t sshCheckPrivateKeyPadding(const uint8_t *pad, size_t length)
Check padding string.
error_t sshParseOpenSshEd448PrivateKey(const uint8_t *data, size_t length, SshEddsaPrivateKey *privateKey)
Parse Ed448 private key blob (OpenSSH format)
uint8_t data[]
Definition: ethernet.h:224
DSA private key (OpenSSH format)
SshString keyFormatId
Definition: ssh_key_parse.h:79
error_t sshParseRsaHostKey(const uint8_t *data, size_t length, SshRsaHostKey *hostKey)
Parse an RSA host key structure.
SshString keyFormatId
SshBinaryString g
Definition: ssh_key_parse.h:68
SshBinaryString n
Definition: ssh_key_parse.h:55
SshBinaryString key
SshBinaryString q
SshString keyFormatId
Private key header (OpenSSH format)
SshBinaryString encrypted
SshBinaryString q
Definition: ssh_key_parse.h:81
error_t
Error codes.
Definition: error.h:43
SshBinaryString n
RSA private key (OpenSSH format)
error_t sshParseHostKey(const uint8_t *data, size_t length, SshString *keyFormatId)
Parse host key structure.
Definition: ssh_key_parse.c:54
SshString keyFormatId
SshBinaryString e
SshBinaryString kdfOptions
SshString keyFormatId
Definition: ssh_key_parse.h:53
SshBinaryString p
Definition: ssh_key_parse.h:66
SshBinaryString d
SshBinaryString e
Definition: ssh_key_parse.h:54
EdDSA host key.
Definition: ssh_key_parse.h:90
uint8_t length
Definition: tcp.h:375
SshBinaryString y
SshBinaryString qinv
String.
Definition: ssh_types.h:56
SshString keyFormatId
Definition: ssh_key_parse.h:91
ML-DSA host key.
SshBinaryString d
error_t sshParseEcdsaHostKey(const uint8_t *data, size_t length, SshEcdsaHostKey *hostKey)
Parse an ECDSA host key structure.
error_t sshParseDsaHostKey(const uint8_t *data, size_t length, SshDsaHostKey *hostKey)
Parse a DSA host key structure.
SSH data type representations.
error_t sshParseOpenSshRsaPrivateKey(const uint8_t *data, size_t length, SshRsaPrivateKey *privateKey)
Parse RSA private key blob (OpenSSH format)
SshBinaryString g
error_t sshParseEd25519HostKey(const uint8_t *data, size_t length, SshEddsaHostKey *hostKey)
Parse an Ed25519 host key structure.
ECDSA host key.
Definition: ssh_key_parse.h:78
SshBinaryString q
error_t sshParseOpenSshDsaPrivateKey(const uint8_t *data, size_t length, SshDsaPrivateKey *privateKey)
Parse DSA private key blob (OpenSSH format)
error_t sshParseOpenSshEd25519PrivateKey(const uint8_t *data, size_t length, SshEddsaPrivateKey *privateKey)
Parse Ed25519 private key blob (OpenSSH format)
RSA host key.
Definition: ssh_key_parse.h:52
SshBinaryString p
SshBinaryString x
error_t sshParseOpenSshPrivateKeyHeader(const uint8_t *data, size_t length, SshPrivateKeyHeader *privateKeyHeader)
Parse private key header (OpenSSH format)
SshBinaryString p
SshBinaryString q
error_t sshParseOpenSshEcdsaPrivateKey(const uint8_t *data, size_t length, SshEcdsaPrivateKey *privateKey)
Parse ECDSA private key blob (OpenSSH format)
SshString curveName
Definition: ssh_key_parse.h:80
SshBinaryString publicKey
SshBinaryString key
Definition: ssh_key_parse.h:92