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