8
static const char *EXPECTED_RSA_HOSTKEY =
9
"AAAAB3NzaC1yc2EAAAABIwAAAQEArrr/JuJmaZligyfS8vcNur+mWR2ddDQtVdhHzdKU"
10
"UoR6/Om6cvxpe61H1YZO1xCpLUBXmkki4HoNtYOpPB2W4V+8U4BDeVBD5crypEOE1+7B"
11
"Am99fnEDxYIOZq2/jTP0yQmzCpWYS3COyFmkOL7sfX1wQMeW5zQT2WKcxC6FSWbhDqrB"
12
"eNEGi687hJJoJ7YXgY/IdiYW5NcOuqRSWljjGS3dAJsHHWk4nJbhjEDXbPaeduMAwQU9"
13
"i6ELfP3r+q6wdu0P4jWaoo3De1aYxnToV/ldXykpipON4NPamsb6Ph2qlJQKypq7J4iQ"
14
"gkIIbCU1A31+4ExvcIVoxLQw/aTSbw==";
16
static const char *EXPECTED_ECDSA_HOSTKEY =
17
"AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBC+/syyeKJD9dC2ZH"
18
"9Q7iJGReR4YM3rUCMsSynkyXojdfSClGCMY7JvWlt30ESjYvxoTfSRGx6WvaqYK/vPoYQ4=";
20
static const char *EXPECTED_ED25519_HOSTKEY =
21
"AAAAC3NzaC1lZDI1NTE5AAAAIIxtdyg2ZRXE70UwyPVUH3UyfDBV8GX5cPF636P6hjom";
24
static const char *EXPECTED_RSA_MD5_HASH_DIGEST =
25
"0C0ED1A5BB10275F76924CE187CE5C5E";
28
static const char *EXPECTED_RSA_SHA1_HASH_DIGEST =
29
"F3CD59E2913F4422B80F7B0A82B2B89EAE449387";
31
static const char *EXPECTED_RSA_SHA256_HASH_DIGEST =
32
"92E3DA49DF3C7F99A828F505ED8239397A5D1F62914459760F878F7510F563A3";
35
static const char *EXPECTED_ECDSA_MD5_HASH_DIGEST =
36
"0402E4D897580BBC911379CBD88BCD3D";
39
static const char *EXPECTED_ECDSA_SHA1_HASH_DIGEST =
40
"12FDAD1E3B31B10BABB00F2A8D1B9A62C326BD2F";
42
static const char *EXPECTED_ECDSA_SHA256_HASH_DIGEST =
43
"56FCD975B166C3F0342D0036E44C311A86C0EAE40713B53FC776369BAE7F5264";
45
static const char *EXPECTED_ED25519_SHA256_HASH_DIGEST =
46
"2638B020F6121FA750A7F4754B718419F621814C6E779D68ADF26AA68814ADDF";
49
static const size_t MD5_HASH_SIZE = 16;
51
static const size_t SHA1_HASH_SIZE = 20;
52
static const size_t SHA256_HASH_SIZE = 32;
54
static void calculate_digest(const char *hash, size_t hash_len, char *buffer,
59
char *end = buffer + buffer_len;
61
for(i = 0; i < hash_len && p < end; ++i) {
62
p += snprintf(p, (size_t)(end - p), "%02X", (unsigned char)hash[i]);
66
int test(LIBSSH2_SESSION *session)
74
const char *sha1_hash;
75
const char *sha256_hash;
80
(void)EXPECTED_RSA_HOSTKEY;
81
(void)EXPECTED_ECDSA_HOSTKEY;
82
(void)EXPECTED_ED25519_HOSTKEY;
84
hostkey = libssh2_session_hostkey(session, &len, &type);
86
print_last_session_error("libssh2_session_hostkey");
90
if(type == LIBSSH2_HOSTKEY_TYPE_ED25519) {
92
sha256_hash = libssh2_hostkey_hash(session,
93
LIBSSH2_HOSTKEY_HASH_SHA256);
95
print_last_session_error(
96
"libssh2_hostkey_hash(LIBSSH2_HOSTKEY_HASH_SHA256)");
100
calculate_digest(sha256_hash, SHA256_HASH_SIZE, buf, BUFSIZ);
102
if(strcmp(buf, EXPECTED_ED25519_SHA256_HASH_DIGEST) != 0) {
104
"ED25519 SHA256 hash not as expected - digest %s != %s\n",
105
buf, EXPECTED_ED25519_SHA256_HASH_DIGEST);
109
else if(type == LIBSSH2_HOSTKEY_TYPE_ECDSA_256) {
112
md5_hash = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_MD5);
114
print_last_session_error(
115
"libssh2_hostkey_hash(LIBSSH2_HOSTKEY_HASH_MD5)");
119
calculate_digest(md5_hash, MD5_HASH_SIZE, buf, BUFSIZ);
121
if(strcmp(buf, EXPECTED_ECDSA_MD5_HASH_DIGEST) != 0) {
123
"ECDSA MD5 hash not as expected - digest %s != %s\n",
124
buf, EXPECTED_ECDSA_MD5_HASH_DIGEST);
129
sha1_hash = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
131
print_last_session_error(
132
"libssh2_hostkey_hash(LIBSSH2_HOSTKEY_HASH_SHA1)");
136
calculate_digest(sha1_hash, SHA1_HASH_SIZE, buf, BUFSIZ);
138
if(strcmp(buf, EXPECTED_ECDSA_SHA1_HASH_DIGEST) != 0) {
140
"ECDSA SHA1 hash not as expected - digest %s != %s\n",
141
buf, EXPECTED_ECDSA_SHA1_HASH_DIGEST);
145
sha256_hash = libssh2_hostkey_hash(session,
146
LIBSSH2_HOSTKEY_HASH_SHA256);
148
print_last_session_error(
149
"libssh2_hostkey_hash(LIBSSH2_HOSTKEY_HASH_SHA256)");
153
calculate_digest(sha256_hash, SHA256_HASH_SIZE, buf, BUFSIZ);
155
if(strcmp(buf, EXPECTED_ECDSA_SHA256_HASH_DIGEST) != 0) {
157
"ECDSA SHA256 hash not as expected - digest %s != %s\n",
158
buf, EXPECTED_ECDSA_SHA256_HASH_DIGEST);
162
else if(type == LIBSSH2_HOSTKEY_TYPE_RSA) {
165
md5_hash = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_MD5);
167
print_last_session_error(
168
"libssh2_hostkey_hash(LIBSSH2_HOSTKEY_HASH_MD5)");
172
calculate_digest(md5_hash, MD5_HASH_SIZE, buf, BUFSIZ);
174
if(strcmp(buf, EXPECTED_RSA_MD5_HASH_DIGEST) != 0) {
176
"MD5 hash not as expected - digest %s != %s\n",
177
buf, EXPECTED_RSA_MD5_HASH_DIGEST);
182
sha1_hash = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
184
print_last_session_error(
185
"libssh2_hostkey_hash(LIBSSH2_HOSTKEY_HASH_SHA1)");
189
calculate_digest(sha1_hash, SHA1_HASH_SIZE, buf, BUFSIZ);
191
if(strcmp(buf, EXPECTED_RSA_SHA1_HASH_DIGEST) != 0) {
193
"SHA1 hash not as expected - digest %s != %s\n",
194
buf, EXPECTED_RSA_SHA1_HASH_DIGEST);
198
sha256_hash = libssh2_hostkey_hash(session,
199
LIBSSH2_HOSTKEY_HASH_SHA256);
201
print_last_session_error(
202
"libssh2_hostkey_hash(LIBSSH2_HOSTKEY_HASH_SHA256)");
206
calculate_digest(sha256_hash, SHA256_HASH_SIZE, buf, BUFSIZ);
208
if(strcmp(buf, EXPECTED_RSA_SHA256_HASH_DIGEST) != 0) {
210
"SHA256 hash not as expected - digest %s != %s\n",
211
buf, EXPECTED_RSA_SHA256_HASH_DIGEST);
216
fprintf(stderr, "Unexpected type of hostkey: %i\n", type);