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