Coverage Report

Created: 2026-02-26 06:46

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/openssh/ssherr.c
Line
Count
Source
1
/*  $OpenBSD: ssherr.c,v 1.11 2026/02/06 23:31:29 dtucker Exp $ */
2
/*
3
 * Copyright (c) 2011 Damien Miller
4
 *
5
 * Permission to use, copy, modify, and distribute this software for any
6
 * purpose with or without fee is hereby granted, provided that the above
7
 * copyright notice and this permission notice appear in all copies.
8
 *
9
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
 */
17
18
#include <errno.h>
19
#include <string.h>
20
#include "ssherr.h"
21
22
const char *
23
ssh_err(int n)
24
1.95k
{
25
1.95k
  const char *msg = NULL;
26
27
1.95k
  switch (n) {
28
0
  case SSH_ERR_SUCCESS:
29
0
    return "success";
30
0
  case SSH_ERR_INTERNAL_ERROR:
31
0
    return "unexpected internal error";
32
0
  case SSH_ERR_ALLOC_FAIL:
33
0
    return "memory allocation failed";
34
315
  case SSH_ERR_MESSAGE_INCOMPLETE:
35
315
    return "incomplete message";
36
562
  case SSH_ERR_INVALID_FORMAT:
37
562
    return "invalid format";
38
0
  case SSH_ERR_BIGNUM_IS_NEGATIVE:
39
0
    return "bignum is negative";
40
66
  case SSH_ERR_STRING_TOO_LARGE:
41
66
    return "string is too large";
42
0
  case SSH_ERR_BIGNUM_TOO_LARGE:
43
0
    return "bignum is too large";
44
44
  case SSH_ERR_ECPOINT_TOO_LARGE:
45
44
    return "elliptic curve point is too large";
46
0
  case SSH_ERR_NO_BUFFER_SPACE:
47
0
    return "insufficient buffer space";
48
5
  case SSH_ERR_INVALID_ARGUMENT:
49
5
    return "invalid argument";
50
16
  case SSH_ERR_KEY_BITS_MISMATCH:
51
16
    return "key bits do not match";
52
0
  case SSH_ERR_EC_CURVE_INVALID:
53
0
    return "invalid elliptic curve";
54
429
  case SSH_ERR_KEY_TYPE_MISMATCH:
55
429
    return "key type does not match";
56
131
  case SSH_ERR_KEY_TYPE_UNKNOWN:
57
131
    return "unknown or unsupported key type";
58
109
  case SSH_ERR_EC_CURVE_MISMATCH:
59
109
    return "elliptic curve does not match";
60
0
  case SSH_ERR_EXPECTED_CERT:
61
0
    return "plain key provided where certificate required";
62
0
  case SSH_ERR_KEY_LACKS_CERTBLOB:
63
0
    return "key lacks certificate data";
64
53
  case SSH_ERR_KEY_CERT_UNKNOWN_TYPE:
65
53
    return "unknown/unsupported certificate type";
66
57
  case SSH_ERR_KEY_CERT_INVALID_SIGN_KEY:
67
57
    return "invalid certificate signing key";
68
0
  case SSH_ERR_KEY_INVALID_EC_VALUE:
69
0
    return "invalid elliptic curve value";
70
58
  case SSH_ERR_SIGNATURE_INVALID:
71
58
    return "incorrect signature";
72
0
  case SSH_ERR_LIBCRYPTO_ERROR:
73
0
    msg = ssherr_libcrypto();
74
0
    return msg != NULL ? msg : "error in libcrypto";
75
24
  case SSH_ERR_UNEXPECTED_TRAILING_DATA:
76
24
    return "unexpected bytes remain after decoding";
77
0
  case SSH_ERR_SYSTEM_ERROR:
78
0
    return strerror(errno);
79
0
  case SSH_ERR_KEY_CERT_INVALID:
80
0
    return "invalid certificate";
81
0
  case SSH_ERR_AGENT_COMMUNICATION:
82
0
    return "communication with agent failed";
83
0
  case SSH_ERR_AGENT_FAILURE:
84
0
    return "agent refused operation";
85
0
  case SSH_ERR_DH_GEX_OUT_OF_RANGE:
86
0
    return "DH GEX group out of range";
87
0
  case SSH_ERR_DISCONNECTED:
88
0
    return "disconnected";
89
0
  case SSH_ERR_MAC_INVALID:
90
0
    return "message authentication code incorrect";
91
0
  case SSH_ERR_NO_CIPHER_ALG_MATCH:
92
0
    return "no matching cipher found";
93
0
  case SSH_ERR_NO_MAC_ALG_MATCH:
94
0
    return "no matching MAC found";
95
0
  case SSH_ERR_NO_COMPRESS_ALG_MATCH:
96
0
    return "no matching compression method found";
97
0
  case SSH_ERR_NO_KEX_ALG_MATCH:
98
0
    return "no matching key exchange method found";
99
0
  case SSH_ERR_NO_HOSTKEY_ALG_MATCH:
100
0
    return "no matching host key type found";
101
0
  case SSH_ERR_PROTOCOL_MISMATCH:
102
0
    return "protocol version mismatch";
103
0
  case SSH_ERR_NO_PROTOCOL_VERSION:
104
0
    return "could not read protocol version";
105
0
  case SSH_ERR_NO_HOSTKEY_LOADED:
106
0
    return "could not load host key";
107
0
  case SSH_ERR_NEED_REKEY:
108
0
    return "rekeying not supported by peer";
109
0
  case SSH_ERR_PASSPHRASE_TOO_SHORT:
110
0
    return "passphrase is too short (minimum five characters)";
111
0
  case SSH_ERR_FILE_CHANGED:
112
0
    return "file changed while reading";
113
0
  case SSH_ERR_KEY_UNKNOWN_CIPHER:
114
0
    return "key encrypted using unsupported cipher";
115
0
  case SSH_ERR_KEY_WRONG_PASSPHRASE:
116
0
    return "incorrect passphrase supplied to decrypt private key";
117
0
  case SSH_ERR_KEY_BAD_PERMISSIONS:
118
0
    return "bad permissions";
119
0
  case SSH_ERR_KEY_CERT_MISMATCH:
120
0
    return "certificate does not match key";
121
0
  case SSH_ERR_KEY_NOT_FOUND:
122
0
    return "key not found";
123
0
  case SSH_ERR_AGENT_NOT_PRESENT:
124
0
    return "agent not present";
125
0
  case SSH_ERR_AGENT_NO_IDENTITIES:
126
0
    return "agent contains no identities";
127
0
  case SSH_ERR_BUFFER_READ_ONLY:
128
0
    return "internal error: buffer is read-only";
129
0
  case SSH_ERR_KRL_BAD_MAGIC:
130
0
    return "KRL file has invalid magic number";
131
0
  case SSH_ERR_KEY_REVOKED:
132
0
    return "Key is revoked";
133
0
  case SSH_ERR_CONN_CLOSED:
134
0
    return "Connection closed";
135
0
  case SSH_ERR_CONN_TIMEOUT:
136
0
    return "Connection timed out";
137
0
  case SSH_ERR_CONN_CORRUPT:
138
0
    return "Connection corrupted";
139
0
  case SSH_ERR_PROTOCOL_ERROR:
140
0
    return "Protocol error";
141
28
  case SSH_ERR_KEY_LENGTH:
142
28
    return "Invalid key length";
143
0
  case SSH_ERR_NUMBER_TOO_LARGE:
144
0
    return "number is too large";
145
57
  case SSH_ERR_SIGN_ALG_UNSUPPORTED:
146
57
    return "signature algorithm not supported";
147
0
  case SSH_ERR_FEATURE_UNSUPPORTED:
148
0
    return "requested feature not supported";
149
0
  case SSH_ERR_DEVICE_NOT_FOUND:
150
0
    return "device not found";
151
0
  default:
152
0
    return "unknown error";
153
1.95k
  }
154
1.95k
}