1/*	$NetBSD: dst_result.c,v 1.1 2024/02/18 20:57:31 christos Exp $	*/
2
3/*
4 * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
5 *
6 * SPDX-License-Identifier: MPL-2.0
7 *
8 * This Source Code Form is subject to the terms of the Mozilla Public
9 * License, v. 2.0.  If a copy of the MPL was not distributed with this
10 * file, you can obtain one at https://mozilla.org/MPL/2.0/.
11 *
12 * See the COPYRIGHT file distributed with this work for additional
13 * information regarding copyright ownership.
14 */
15
16#include <isc/once.h>
17#include <isc/util.h>
18
19#include <dst/result.h>
20
21static const char *text[DST_R_NRESULTS] = {
22	"algorithm is unsupported",		 /*%< 0 */
23	"crypto failure",			 /*%< 1 */
24	"built with no crypto support",		 /*%< 2 */
25	"illegal operation for a null key",	 /*%< 3 */
26	"public key is invalid",		 /*%< 4 */
27	"private key is invalid",		 /*%< 5 */
28	"external key",				 /*%< 6 */
29	"error occurred writing key to disk",	 /*%< 7 */
30	"invalid algorithm specific parameter",	 /*%< 8 */
31	"UNUSED9",				 /*%< 9 */
32	"UNUSED10",				 /*%< 10 */
33	"sign failure",				 /*%< 11 */
34	"UNUSED12",				 /*%< 12 */
35	"UNUSED13",				 /*%< 13 */
36	"verify failure",			 /*%< 14 */
37	"not a public key",			 /*%< 15 */
38	"not a private key",			 /*%< 16 */
39	"not a key that can compute a secret",	 /*%< 17 */
40	"failure computing a shared secret",	 /*%< 18 */
41	"no randomness available",		 /*%< 19 */
42	"bad key type",				 /*%< 20 */
43	"no engine",				 /*%< 21 */
44	"illegal operation for an external key", /*%< 22 */
45};
46
47static const char *ids[DST_R_NRESULTS] = {
48	"DST_R_UNSUPPORTEDALG",
49	"DST_R_CRYPTOFAILURE",
50	"DST_R_NOCRYPTO",
51	"DST_R_NULLKEY",
52	"DST_R_INVALIDPUBLICKEY",
53	"DST_R_INVALIDPRIVATEKEY",
54	"UNUSED",
55	"DST_R_WRITEERROR",
56	"DST_R_INVALIDPARAM",
57	"UNUSED",
58	"UNUSED",
59	"DST_R_SIGNFAILURE",
60	"UNUSED",
61	"UNUSED",
62	"DST_R_VERIFYFAILURE",
63	"DST_R_NOTPUBLICKEY",
64	"DST_R_NOTPRIVATEKEY",
65	"DST_R_KEYCANNOTCOMPUTESECRET",
66	"DST_R_COMPUTESECRETFAILURE",
67	"DST_R_NORANDOMNESS",
68	"DST_R_BADKEYTYPE",
69	"DST_R_NOENGINE",
70	"DST_R_EXTERNALKEY",
71};
72
73#define DST_RESULT_RESULTSET 2
74
75static isc_once_t once = ISC_ONCE_INIT;
76
77static void
78initialize_action(void) {
79	isc_result_t result;
80
81	result = isc_result_register(ISC_RESULTCLASS_DST, DST_R_NRESULTS, text,
82				     DST_RESULT_RESULTSET);
83	if (result != ISC_R_SUCCESS) {
84		UNEXPECTED_ERROR(__FILE__, __LINE__,
85				 "isc_result_register() failed: %u", result);
86	}
87	result = isc_result_registerids(ISC_RESULTCLASS_DST, DST_R_NRESULTS,
88					ids, DST_RESULT_RESULTSET);
89	if (result != ISC_R_SUCCESS) {
90		UNEXPECTED_ERROR(__FILE__, __LINE__,
91				 "isc_result_registerids() failed: %u", result);
92	}
93}
94
95static void
96initialize(void) {
97	RUNTIME_CHECK(isc_once_do(&once, initialize_action) == ISC_R_SUCCESS);
98}
99
100const char *
101dst_result_totext(isc_result_t result) {
102	initialize();
103
104	return (isc_result_totext(result));
105}
106
107void
108dst_result_register(void) {
109	initialize();
110}
111
112/*! \file */
113