1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
# Copyright © 2022-2024 Guillem Jover <guillem@debian.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
=encoding utf8
=head1 NAME
Dpkg::OpenPGP::ErrorCodes - OpenPGP error codes
=head1 DESCRIPTION
This module provides error codes handling to be used by the various
OpenPGP backends.
B<Note>: This is a private module, its API can change at any time.
=cut
package Dpkg::OpenPGP::ErrorCodes 0.01;
use strict;
use warnings;
our @EXPORT = qw(
OPENPGP_OK
OPENPGP_NO_SIG
OPENPGP_MISSING_ARG
OPENPGP_UNSUPPORTED_OPTION
OPENPGP_BAD_DATA
OPENPGP_EXPECTED_TEXT
OPENPGP_OUTPUT_EXISTS
OPENPGP_MISSING_INPUT
OPENPGP_KEY_IS_PROTECTED
OPENPGP_UNSUPPORTED_SUBCMD
OPENPGP_UNSUPPORTED_SPECIAL_PREFIX
OPENPGP_AMBIGUOUS_INPUT
OPENPGP_KEY_CANNOT_SIGN
OPENPGP_INCOMPATIBLE_OPTIONS
OPENPGP_NO_HW_KEY_FOUND
OPENPGP_HW_KEY_FAILURE
OPENPGP_MISSING_CMD
OPENPGP_NEEDS_KEYSTORE
OPENPGP_CMD_CANNOT_SIGN
openpgp_errorcode_to_string
);
use Exporter qw(import);
use Dpkg::Gettext;
# Error codes based on
# https://ietf.org/archive/id/draft-dkg-openpgp-stateless-cli-10.html#section-7
#
# Local error codes use a negative number, as that should not conflict with
# the SOP exit codes.
use constant {
OPENPGP_OK => 0,
OPENPGP_NO_SIG => 3,
OPENPGP_MISSING_ARG => 19,
OPENPGP_UNSUPPORTED_OPTION => 37,
OPENPGP_BAD_DATA => 41,
OPENPGP_EXPECTED_TEXT => 53,
OPENPGP_OUTPUT_EXISTS => 59,
OPENPGP_MISSING_INPUT => 61,
OPENPGP_KEY_IS_PROTECTED => 67,
OPENPGP_UNSUPPORTED_SUBCMD => 69,
OPENPGP_UNSUPPORTED_SPECIAL_PREFIX => 71,
OPENPGP_AMBIGUOUS_INPUT => 73,
OPENPGP_KEY_CANNOT_SIGN => 79,
OPENPGP_INCOMPATIBLE_OPTIONS => 83,
OPENPGP_NO_HW_KEY_FOUND => 97,
OPENPGP_HW_KEY_FAILURE => 101,
OPENPGP_MISSING_CMD => -1,
OPENPGP_NEEDS_KEYSTORE => -2,
OPENPGP_CMD_CANNOT_SIGN => -3,
};
my %code2error = (
OPENPGP_OK() => N_('success'),
OPENPGP_NO_SIG() => N_('no acceptable signature found'),
OPENPGP_MISSING_ARG() => N_('missing required argument'),
OPENPGP_UNSUPPORTED_OPTION() => N_('unsupported option'),
OPENPGP_BAD_DATA() => N_('invalid data type'),
OPENPGP_EXPECTED_TEXT() => N_('non-text input where text expected'),
OPENPGP_OUTPUT_EXISTS() => N_('output file already exists'),
OPENPGP_MISSING_INPUT() => N_('input file does not exist'),
OPENPGP_KEY_IS_PROTECTED() => N_('cannot unlock password-protected key'),
OPENPGP_UNSUPPORTED_SUBCMD() => N_('unsupported subcommand'),
OPENPGP_UNSUPPORTED_SPECIAL_PREFIX() => N_('unknown special designator in indirect parameter'),
OPENPGP_AMBIGUOUS_INPUT() => N_('special designator in indirect parameter is an existing file'),
OPENPGP_KEY_CANNOT_SIGN() => N_('key is not signature-capable'),
OPENPGP_INCOMPATIBLE_OPTIONS() => N_('mutually exclusive options'),
OPENPGP_NO_HW_KEY_FOUND() => N_('cannot identify hardware device for hardware-backed secret keys'),
OPENPGP_HW_KEY_FAILURE() => N_('cannot perform operation on hardware-backed secret key'),
OPENPGP_MISSING_CMD() => N_('missing OpenPGP implementation'),
OPENPGP_NEEDS_KEYSTORE() => N_('specified key needs a keystore'),
OPENPGP_CMD_CANNOT_SIGN() => N_('OpenPGP backend command cannot sign'),
);
sub openpgp_errorcode_to_string
{
my $code = shift;
return gettext($code2error{$code}) if exists $code2error{$code};
return sprintf g_('error code %d'), $code;
}
=head1 CHANGES
=head2 Version 0.xx
This is a private module.
=cut
1;
|