1 /*******************************************************************************
2 
3     D bindings to GPG error functions, used by libgcrypt.
4 
5     These are actually in the separate libgpg-error library, but libgcrypt is
6     linked with it.
7 
8     Requires linking with libgcrypt:
9 
10         -L-lgcrypt
11 
12     Copyright:
13         Copyright (c) 2009-2016 dunnhumby Germany GmbH.
14         All rights reserved.
15 
16     License:
17         Boost Software License Version 1.0. See LICENSE_BOOST.txt for details.
18         Alternatively, this file may be distributed under the terms of the Tango
19         3-Clause BSD License (see LICENSE_BSD.txt for details).
20 
21         Bear in mind this module provides bindings to an external library that
22         has its own license, which might be more restrictive. Please check the
23         external library license to see which conditions apply for linking.
24 
25 *******************************************************************************/
26 
27 module ocean.util.cipher.gcrypt.c.gpgerror;
28 
29 public import ocean.util.cipher.gcrypt.c.libversion;
30 
31 import ocean.transition;
32 import ocean.core.Verify;
33 
34 extern (C):
35 
36 /// See original's library documentation for details.
37 static immutable GPG_ERROR_VERSION_NUMBER = 0x011500;
38 static immutable GPGRT_VERSION_NUMBER =     0x011500;
39 
40 /// See original's library documentation for details.
41 alias uint gpg_error_t;
42 
43 
44 /// See original's library documentation for details.
45 enum GPG_ERR_SOURCE
46 {
47     UNKNOWN = 0,
48     GCRYPT = 1,
49     GPG = 2,
50     GPGSM = 3,
51     GPGAGENT = 4,
52     PINENTRY = 5,
53     SCD = 6,
54     GPGME = 7,
55     KEYBOX = 8,
56     KSBA = 9,
57     DIRMNGR = 10,
58     GSTI = 11,
59     GPA = 12,
60     KLEO = 13,
61     G13 = 14,
62     ASSUAN = 15,
63     TLS = 17,
64     ANY = 31,
65     USER_1 = 32,
66     USER_2 = 33,
67     USER_3 = 34,
68     USER_4 = 35,
69 
70     MASK = (1 << 7) - 1
71 }
72 
73 /// See original's library documentation for details.
74 static immutable GPG_ERR_SOURCE_DIM = GPG_ERR_SOURCE.max + 1;
75 
76 
77 /// See original's library documentation for details.
78 enum GPG_ERR_CODE
79 {
80     NO_ERROR = 0,
81     GENERAL = 1,
82     UNKNOWN_PACKET = 2,
83     UNKNOWN_VERSION = 3,
84     PUBKEY_ALGO = 4,
85     DIGEST_ALGO = 5,
86     BAD_PUBKEY = 6,
87     BAD_SECKEY = 7,
88     BAD_SIGNATURE = 8,
89     NO_PUBKEY = 9,
90     CHECKSUM = 10,
91     BAD_PASSPHRASE = 11,
92     CIPHER_ALGO = 12,
93     KEYRING_OPEN = 13,
94     INV_PACKET = 14,
95     INV_ARMOR = 15,
96     NO_USER_ID = 16,
97     NO_SECKEY = 17,
98     WRONG_SECKEY = 18,
99     BAD_KEY = 19,
100     COMPR_ALGO = 20,
101     NO_PRIME = 21,
102     NO_ENCODING_METHOD = 22,
103     NO_ENCRYPTION_SCHEME = 23,
104     NO_SIGNATURE_SCHEME = 24,
105     INV_ATTR = 25,
106     NO_VALUE = 26,
107     NOT_FOUND = 27,
108     VALUE_NOT_FOUND = 28,
109     SYNTAX = 29,
110     BAD_MPI = 30,
111     INV_PASSPHRASE = 31,
112     SIG_CLASS = 32,
113     RESOURCE_LIMIT = 33,
114     INV_KEYRING = 34,
115     TRUSTDB = 35,
116     BAD_CERT = 36,
117     INV_USER_ID = 37,
118     UNEXPECTED = 38,
119     TIME_CONFLICT = 39,
120     KEYSERVER = 40,
121     WRONG_PUBKEY_ALGO = 41,
122     TRIBUTE_TO_D_A = 42,
123     WEAK_KEY = 43,
124     INV_KEYLEN = 44,
125     INV_ARG = 45,
126     BAD_URI = 46,
127     INV_URI = 47,
128     NETWORK = 48,
129     UNKNOWN_HOST = 49,
130     SELFTEST_FAILED = 50,
131     NOT_ENCRYPTED = 51,
132     NOT_PROCESSED = 52,
133     UNUSABLE_PUBKEY = 53,
134     UNUSABLE_SECKEY = 54,
135     INV_VALUE = 55,
136     BAD_CERT_CHAIN = 56,
137     MISSING_CERT = 57,
138     NO_DATA = 58,
139     BUG = 59,
140     NOT_SUPPORTED = 60,
141     INV_OP = 61,
142     TIMEOUT = 62,
143     INTERNAL = 63,
144     EOF_GCRYPT = 64,
145     INV_OBJ = 65,
146     TOO_SHORT = 66,
147     TOO_LARGE = 67,
148     NO_OBJ = 68,
149     NOT_IMPLEMENTED = 69,
150     CONFLICT = 70,
151     INV_CIPHER_MODE = 71,
152     INV_FLAG = 72,
153     INV_HANDLE = 73,
154     TRUNCATED = 74,
155     INCOMPLETE_LINE = 75,
156     INV_RESPONSE = 76,
157     NO_AGENT = 77,
158     AGENT = 78,
159     INV_DATA = 79,
160     ASSUAN_SERVER_FAULT = 80,
161     ASSUAN = 81,
162     INV_SESSION_KEY = 82,
163     INV_SEXP = 83,
164     UNSUPPORTED_ALGORITHM = 84,
165     NO_PIN_ENTRY = 85,
166     PIN_ENTRY = 86,
167     BAD_PIN = 87,
168     INV_NAME = 88,
169     BAD_DATA = 89,
170     INV_PARAMETER = 90,
171     WRONG_CARD = 91,
172     NO_DIRMNGR = 92,
173     DIRMNGR = 93,
174     CERT_REVOKED = 94,
175     NO_CRL_KNOWN = 95,
176     CRL_TOO_OLD = 96,
177     LINE_TOO_LONG = 97,
178     NOT_TRUSTED = 98,
179     CANCELED = 99,
180     BAD_CA_CERT = 100,
181     CERT_EXPIRED = 101,
182     CERT_TOO_YOUNG = 102,
183     UNSUPPORTED_CERT = 103,
184     UNKNOWN_SEXP = 104,
185     UNSUPPORTED_PROTECTION = 105,
186     CORRUPTED_PROTECTION = 106,
187     AMBIGUOUS_NAME = 107,
188     CARD = 108,
189     CARD_RESET = 109,
190     CARD_REMOVED = 110,
191     INV_CARD = 111,
192     CARD_NOT_PRESENT = 112,
193     NO_PKCS15_APP = 113,
194     NOT_CONFIRMED = 114,
195     CONFIGURATION = 115,
196     NO_POLICY_MATCH = 116,
197     INV_INDEX = 117,
198     INV_ID = 118,
199     NO_SCDAEMON = 119,
200     SCDAEMON = 120,
201     UNSUPPORTED_PROTOCOL = 121,
202     BAD_PIN_METHOD = 122,
203     CARD_NOT_INITIALIZED = 123,
204     UNSUPPORTED_OPERATION = 124,
205     WRONG_KEY_USAGE = 125,
206     NOTHING_FOUND = 126,
207     WRONG_BLOB_TYPE = 127,
208     MISSING_VALUE = 128,
209     HARDWARE = 129,
210     PIN_BLOCKED = 130,
211     USE_CONDITIONS = 131,
212     PIN_NOT_SYNCED = 132,
213     INV_CRL = 133,
214     BAD_BER = 134,
215     INV_BER = 135,
216     ELEMENT_NOT_FOUND = 136,
217     IDENTIFIER_NOT_FOUND = 137,
218     INV_TAG = 138,
219     INV_LENGTH = 139,
220     INV_KEYINFO = 140,
221     UNEXPECTED_TAG = 141,
222     NOT_DER_ENCODED = 142,
223     NO_CMS_OBJ = 143,
224     INV_CMS_OBJ = 144,
225     UNKNOWN_CMS_OBJ = 145,
226     UNSUPPORTED_CMS_OBJ = 146,
227     UNSUPPORTED_ENCODING = 147,
228     UNSUPPORTED_CMS_VERSION = 148,
229     UNKNOWN_ALGORITHM = 149,
230     INV_ENGINE = 150,
231     PUBKEY_NOT_TRUSTED = 151,
232     DECRYPT_FAILED = 152,
233     KEY_EXPIRED = 153,
234     SIG_EXPIRED = 154,
235     ENCODING_PROBLEM = 155,
236     INV_STATE = 156,
237     DUP_VALUE = 157,
238     MISSING_ACTION = 158,
239     MODULE_NOT_FOUND = 159,
240     INV_OID_STRING = 160,
241     INV_TIME = 161,
242     INV_CRL_OBJ = 162,
243     UNSUPPORTED_CRL_VERSION = 163,
244     INV_CERT_OBJ = 164,
245     UNKNOWN_NAME = 165,
246     LOCALE_PROBLEM = 166,
247     NOT_LOCKED = 167,
248     PROTOCOL_VIOLATION = 168,
249     INV_MAC = 169,
250     INV_REQUEST = 170,
251     UNKNOWN_EXTN = 171,
252     UNKNOWN_CRIT_EXTN = 172,
253     LOCKED = 173,
254     UNKNOWN_OPTION = 174,
255     UNKNOWN_COMMAND = 175,
256     NOT_OPERATIONAL = 176,
257     NO_PASSPHRASE = 177,
258     NO_PIN = 178,
259     NOT_ENABLED = 179,
260     NO_ENGINE = 180,
261     MISSING_KEY = 181,
262     TOO_MANY = 182,
263     LIMIT_REACHED = 183,
264     NOT_INITIALIZED = 184,
265     MISSING_ISSUER_CERT = 185,
266     NO_KEYSERVER = 186,
267     INV_CURVE = 187,
268     UNKNOWN_CURVE = 188,
269     DUP_KEY = 189,
270     AMBIGUOUS = 190,
271     NO_CRYPT_CTX = 191,
272     WRONG_CRYPT_CTX = 192,
273     BAD_CRYPT_CTX = 193,
274     CRYPT_CTX_CONFLICT = 194,
275     BROKEN_PUBKEY = 195,
276     BROKEN_SECKEY = 196,
277     MAC_ALGO = 197,
278     FULLY_CANCELED = 198,
279     UNFINISHED = 199,
280     BUFFER_TOO_SHORT = 200,
281     SEXP_INV_LEN_SPEC = 201,
282     SEXP_STRING_TOO_LONG = 202,
283     SEXP_UNMATCHED_PAREN = 203,
284     SEXP_NOT_CANONICAL = 204,
285     SEXP_BAD_CHARACTER = 205,
286     SEXP_BAD_QUOTATION = 206,
287     SEXP_ZERO_PREFIX = 207,
288     SEXP_NESTED_DH = 208,
289     SEXP_UNMATCHED_DH = 209,
290     SEXP_UNEXPECTED_PUNC = 210,
291     SEXP_BAD_HEX_CHAR = 211,
292     SEXP_ODD_HEX_NUMBERS = 212,
293     SEXP_BAD_OCT_CHAR = 213,
294     SERVER_FAILED = 219,
295     NO_NAME = 220,
296     NO_KEY = 221,
297     LEGACY_KEY = 222,
298     REQUEST_TOO_SHORT = 223,
299     REQUEST_TOO_LONG = 224,
300     OBJ_TERM_STATE = 225,
301     NO_CERT_CHAIN = 226,
302     CERT_TOO_LARGE = 227,
303     INV_RECORD = 228,
304     BAD_MAC = 229,
305     UNEXPECTED_MSG = 230,
306     COMPR_FAILED = 231,
307     WOULD_WRAP = 232,
308     FATAL_ALERT = 233,
309     NO_CIPHER = 234,
310     MISSING_CLIENT_CERT = 235,
311     CLOSE_NOTIFY = 236,
312     TICKET_EXPIRED = 237,
313     BAD_TICKET = 238,
314     UNKNOWN_IDENTITY = 239,
315     BAD_HS_CERT = 240,
316     BAD_HS_CERT_REQ = 241,
317     BAD_HS_CERT_VER = 242,
318     BAD_HS_CHANGE_CIPHER = 243,
319     BAD_HS_CLIENT_HELLO = 244,
320     BAD_HS_SERVER_HELLO = 245,
321     BAD_HS_SERVER_HELLO_DONE = 246,
322     BAD_HS_FINISHED = 247,
323     BAD_HS_SERVER_KEX = 248,
324     BAD_HS_CLIENT_KEX = 249,
325     BOGUS_STRING = 250,
326     FORBIDDEN = 251,
327     KEY_DISABLED = 252,
328     KEY_ON_CARD = 253,
329     INV_LOCK_OBJ = 254,
330     TRUE = 255,
331     FALSE = 256,
332     ASS_GENERAL = 257,
333     ASS_ACCEPT_FAILED = 258,
334     ASS_CONNECT_FAILED = 259,
335     ASS_INV_RESPONSE = 260,
336     ASS_INV_VALUE = 261,
337     ASS_INCOMPLETE_LINE = 262,
338     ASS_LINE_TOO_LONG = 263,
339     ASS_NESTED_COMMANDS = 264,
340     ASS_NO_DATA_CB = 265,
341     ASS_NO_INQUIRE_CB = 266,
342     ASS_NOT_A_SERVER = 267,
343     ASS_NOT_A_CLIENT = 268,
344     ASS_SERVER_START = 269,
345     ASS_READ_ERROR = 270,
346     ASS_WRITE_ERROR = 271,
347     ASS_TOO_MUCH_DATA = 273,
348     ASS_UNEXPECTED_CMD = 274,
349     ASS_UNKNOWN_CMD = 275,
350     ASS_SYNTAX = 276,
351     ASS_CANCELED = 277,
352     ASS_NO_INPUT = 278,
353     ASS_NO_OUTPUT = 279,
354     ASS_PARAMETER = 280,
355     ASS_UNKNOWN_INQUIRE = 281,
356     LDAP_GENERAL = 721,
357     LDAP_ATTR_GENERAL = 722,
358     LDAP_NAME_GENERAL = 723,
359     LDAP_SECURITY_GENERAL = 724,
360     LDAP_SERVICE_GENERAL = 725,
361     LDAP_UPDATE_GENERAL = 726,
362     LDAP_E_GENERAL = 727,
363     LDAP_X_GENERAL = 728,
364     LDAP_OTHER_GENERAL = 729,
365     LDAP_X_CONNECTING = 750,
366     LDAP_REFERRAL_LIMIT = 751,
367     LDAP_CLIENT_LOOP = 752,
368     LDAP_NO_RESULTS = 754,
369     LDAP_CONTROL_NOT_FOUND = 755,
370     LDAP_NOT_SUPPORTED = 756,
371     LDAP_CONNECT = 757,
372     LDAP_NO_MEMORY = 758,
373     LDAP_PARAM = 759,
374     LDAP_USER_CANCELLED = 760,
375     LDAP_FILTER = 761,
376     LDAP_AUTH_UNKNOWN = 762,
377     LDAP_TIMEOUT = 763,
378     LDAP_DECODING = 764,
379     LDAP_ENCODING = 765,
380     LDAP_LOCAL = 766,
381     LDAP_SERVER_DOWN = 767,
382     LDAP_SUCCESS = 768,
383     LDAP_OPERATIONS = 769,
384     LDAP_PROTOCOL = 770,
385     LDAP_TIMELIMIT = 771,
386     LDAP_SIZELIMIT = 772,
387     LDAP_COMPARE_FALSE = 773,
388     LDAP_COMPARE_TRUE = 774,
389     LDAP_UNSUPPORTED_AUTH = 775,
390     LDAP_STRONG_AUTH_RQRD = 776,
391     LDAP_PARTIAL_RESULTS = 777,
392     LDAP_REFERRAL = 778,
393     LDAP_ADMINLIMIT = 779,
394     LDAP_UNAVAIL_CRIT_EXTN = 780,
395     LDAP_CONFIDENT_RQRD = 781,
396     LDAP_SASL_BIND_INPROG = 782,
397     LDAP_NO_SUCH_ATTRIBUTE = 784,
398     LDAP_UNDEFINED_TYPE = 785,
399     LDAP_BAD_MATCHING = 786,
400     LDAP_CONST_VIOLATION = 787,
401     LDAP_TYPE_VALUE_EXISTS = 788,
402     LDAP_INV_SYNTAX = 789,
403     LDAP_NO_SUCH_OBJ = 800,
404     LDAP_ALIAS_PROBLEM = 801,
405     LDAP_INV_DN_SYNTAX = 802,
406     LDAP_IS_LEAF = 803,
407     LDAP_ALIAS_DEREF = 804,
408     LDAP_X_PROXY_AUTH_FAIL = 815,
409     LDAP_BAD_AUTH = 816,
410     LDAP_INV_CREDENTIALS = 817,
411     LDAP_INSUFFICIENT_ACC = 818,
412     LDAP_BUSY = 819,
413     LDAP_UNAVAILABLE = 820,
414     LDAP_UNWILL_TO_PERFORM = 821,
415     LDAP_LOOP_DETECT = 822,
416     LDAP_NAMING_VIOLATION = 832,
417     LDAP_OBJ_CLS_VIOLATION = 833,
418     LDAP_NOT_ALLOW_NONLEAF = 834,
419     LDAP_NOT_ALLOW_ON_RDN = 835,
420     LDAP_ALREADY_EXISTS = 836,
421     LDAP_NO_OBJ_CLASS_MODS = 837,
422     LDAP_RESULTS_TOO_LARGE = 838,
423     LDAP_AFFECTS_MULT_DSAS = 839,
424     LDAP_VLV = 844,
425     LDAP_OTHER = 848,
426     LDAP_CUP_RESOURCE_LIMIT = 881,
427     LDAP_CUP_SEC_VIOLATION = 882,
428     LDAP_CUP_INV_DATA = 883,
429     LDAP_CUP_UNSUP_SCHEME = 884,
430     LDAP_CUP_RELOAD = 885,
431     LDAP_CANCELLED = 886,
432     LDAP_NO_SUCH_OPERATION = 887,
433     LDAP_TOO_LATE = 888,
434     LDAP_CANNOT_CANCEL = 889,
435     LDAP_ASSERTION_FAILED = 890,
436     LDAP_PROX_AUTH_DENIED = 891,
437     USER_1 = (1 << 10),
438     USER_2,
439     USER_3,
440     USER_4,
441     USER_5,
442     USER_6,
443     USER_7,
444     USER_8,
445     USER_9,
446     USER_10,
447     USER_11,
448     USER_12,
449     USER_13,
450     USER_14,
451     USER_15,
452     USER_16,
453     MISSING_ERRNO = (1 << 14) - 3,
454     UNKNOWN_ERRNO = (1 << 14) - 2,
455     EOF = (1 << 14) - 1,
456 
457     SYSTEM_ERROR = (1 << 15),
458     E2BIG = SYSTEM_ERROR | 0,
459     EACCES = SYSTEM_ERROR | 1,
460     EADDRINUSE = SYSTEM_ERROR | 2,
461     EADDRNOTAVAIL = SYSTEM_ERROR | 3,
462     EADV = SYSTEM_ERROR | 4,
463     EAFNOSUPPORT = SYSTEM_ERROR | 5,
464     EAGAIN = SYSTEM_ERROR | 6,
465     EALREADY = SYSTEM_ERROR | 7,
466     EAUTH = SYSTEM_ERROR | 8,
467     EBACKGROUND = SYSTEM_ERROR | 9,
468     EBADE = SYSTEM_ERROR | 10,
469     EBADF = SYSTEM_ERROR | 11,
470     EBADFD = SYSTEM_ERROR | 12,
471     EBADMSG = SYSTEM_ERROR | 13,
472     EBADR = SYSTEM_ERROR | 14,
473     EBADRPC = SYSTEM_ERROR | 15,
474     EBADRQC = SYSTEM_ERROR | 16,
475     EBADSLT = SYSTEM_ERROR | 17,
476     EBFONT = SYSTEM_ERROR | 18,
477     EBUSY = SYSTEM_ERROR | 19,
478     ECANCELED = SYSTEM_ERROR | 20,
479     ECHILD = SYSTEM_ERROR | 21,
480     ECHRNG = SYSTEM_ERROR | 22,
481     ECOMM = SYSTEM_ERROR | 23,
482     ECONNABORTED = SYSTEM_ERROR | 24,
483     ECONNREFUSED = SYSTEM_ERROR | 25,
484     ECONNRESET = SYSTEM_ERROR | 26,
485     ED = SYSTEM_ERROR | 27,
486     EDEADLK = SYSTEM_ERROR | 28,
487     EDEADLOCK = SYSTEM_ERROR | 29,
488     EDESTADDRREQ = SYSTEM_ERROR | 30,
489     EDIED = SYSTEM_ERROR | 31,
490     EDOM = SYSTEM_ERROR | 32,
491     EDOTDOT = SYSTEM_ERROR | 33,
492     EDQUOT = SYSTEM_ERROR | 34,
493     EEXIST = SYSTEM_ERROR | 35,
494     EFAULT = SYSTEM_ERROR | 36,
495     EFBIG = SYSTEM_ERROR | 37,
496     EFTYPE = SYSTEM_ERROR | 38,
497     EGRATUITOUS = SYSTEM_ERROR | 39,
498     EGREGIOUS = SYSTEM_ERROR | 40,
499     EHOSTDOWN = SYSTEM_ERROR | 41,
500     EHOSTUNREACH = SYSTEM_ERROR | 42,
501     EIDRM = SYSTEM_ERROR | 43,
502     EIEIO = SYSTEM_ERROR | 44,
503     EILSEQ = SYSTEM_ERROR | 45,
504     EINPROGRESS = SYSTEM_ERROR | 46,
505     EINTR = SYSTEM_ERROR | 47,
506     EINVAL = SYSTEM_ERROR | 48,
507     EIO = SYSTEM_ERROR | 49,
508     EISCONN = SYSTEM_ERROR | 50,
509     EISDIR = SYSTEM_ERROR | 51,
510     EISNAM = SYSTEM_ERROR | 52,
511     EL2HLT = SYSTEM_ERROR | 53,
512     EL2NSYNC = SYSTEM_ERROR | 54,
513     EL3HLT = SYSTEM_ERROR | 55,
514     EL3RST = SYSTEM_ERROR | 56,
515     ELIBACC = SYSTEM_ERROR | 57,
516     ELIBBAD = SYSTEM_ERROR | 58,
517     ELIBEXEC = SYSTEM_ERROR | 59,
518     ELIBMAX = SYSTEM_ERROR | 60,
519     ELIBSCN = SYSTEM_ERROR | 61,
520     ELNRNG = SYSTEM_ERROR | 62,
521     ELOOP = SYSTEM_ERROR | 63,
522     EMEDIUMTYPE = SYSTEM_ERROR | 64,
523     EMFILE = SYSTEM_ERROR | 65,
524     EMLINK = SYSTEM_ERROR | 66,
525     EMSGSIZE = SYSTEM_ERROR | 67,
526     EMULTIHOP = SYSTEM_ERROR | 68,
527     ENAMETOOLONG = SYSTEM_ERROR | 69,
528     ENAVAIL = SYSTEM_ERROR | 70,
529     ENEEDAUTH = SYSTEM_ERROR | 71,
530     ENETDOWN = SYSTEM_ERROR | 72,
531     ENETRESET = SYSTEM_ERROR | 73,
532     ENETUNREACH = SYSTEM_ERROR | 74,
533     ENFILE = SYSTEM_ERROR | 75,
534     ENOANO = SYSTEM_ERROR | 76,
535     ENOBUFS = SYSTEM_ERROR | 77,
536     ENOCSI = SYSTEM_ERROR | 78,
537     ENODATA = SYSTEM_ERROR | 79,
538     ENODEV = SYSTEM_ERROR | 80,
539     ENOENT = SYSTEM_ERROR | 81,
540     ENOEXEC = SYSTEM_ERROR | 82,
541     ENOLCK = SYSTEM_ERROR | 83,
542     ENOLINK = SYSTEM_ERROR | 84,
543     ENOMEDIUM = SYSTEM_ERROR | 85,
544     ENOMEM = SYSTEM_ERROR | 86,
545     ENOMSG = SYSTEM_ERROR | 87,
546     ENONET = SYSTEM_ERROR | 88,
547     ENOPKG = SYSTEM_ERROR | 89,
548     ENOPROTOOPT = SYSTEM_ERROR | 90,
549     ENOSPC = SYSTEM_ERROR | 91,
550     ENOSR = SYSTEM_ERROR | 92,
551     ENOSTR = SYSTEM_ERROR | 93,
552     ENOSYS = SYSTEM_ERROR | 94,
553     ENOTBLK = SYSTEM_ERROR | 95,
554     ENOTCONN = SYSTEM_ERROR | 96,
555     ENOTDIR = SYSTEM_ERROR | 97,
556     ENOTEMPTY = SYSTEM_ERROR | 98,
557     ENOTNAM = SYSTEM_ERROR | 99,
558     ENOTSOCK = SYSTEM_ERROR | 100,
559     ENOTSUP = SYSTEM_ERROR | 101,
560     ENOTTY = SYSTEM_ERROR | 102,
561     ENOTUNIQ = SYSTEM_ERROR | 103,
562     ENXIO = SYSTEM_ERROR | 104,
563     EOPNOTSUPP = SYSTEM_ERROR | 105,
564     EOVERFLOW = SYSTEM_ERROR | 106,
565     EPERM = SYSTEM_ERROR | 107,
566     EPFNOSUPPORT = SYSTEM_ERROR | 108,
567     EPIPE = SYSTEM_ERROR | 109,
568     EPROCLIM = SYSTEM_ERROR | 110,
569     EPROCUNAVAIL = SYSTEM_ERROR | 111,
570     EPROGMISMATCH = SYSTEM_ERROR | 112,
571     EPROGUNAVAIL = SYSTEM_ERROR | 113,
572     EPROTO = SYSTEM_ERROR | 114,
573     EPROTONOSUPPORT = SYSTEM_ERROR | 115,
574     EPROTOTYPE = SYSTEM_ERROR | 116,
575     ERANGE = SYSTEM_ERROR | 117,
576     EREMCHG = SYSTEM_ERROR | 118,
577     EREMOTE = SYSTEM_ERROR | 119,
578     EREMOTEIO = SYSTEM_ERROR | 120,
579     ERESTART = SYSTEM_ERROR | 121,
580     EROFS = SYSTEM_ERROR | 122,
581     ERPCMISMATCH = SYSTEM_ERROR | 123,
582     ESHUTDOWN = SYSTEM_ERROR | 124,
583     ESOCKTNOSUPPORT = SYSTEM_ERROR | 125,
584     ESPIPE = SYSTEM_ERROR | 126,
585     ESRCH = SYSTEM_ERROR | 127,
586     ESRMNT = SYSTEM_ERROR | 128,
587     ESTALE = SYSTEM_ERROR | 129,
588     ESTRPIPE = SYSTEM_ERROR | 130,
589     ETIME = SYSTEM_ERROR | 131,
590     ETIMEDOUT = SYSTEM_ERROR | 132,
591     ETOOMANYREFS = SYSTEM_ERROR | 133,
592     ETXTBSY = SYSTEM_ERROR | 134,
593     EUCLEAN = SYSTEM_ERROR | 135,
594     EUNATCH = SYSTEM_ERROR | 136,
595     EUSERS = SYSTEM_ERROR | 137,
596     EWOULDBLOCK = SYSTEM_ERROR | 138,
597     EXDEV = SYSTEM_ERROR | 139,
598     EXFULL = SYSTEM_ERROR | 140,
599 
600     MASK = (1 << 16) - 1
601 }
602 
603 /// See original's library documentation for details.
604 static immutable GPG_ERR_CODE_DIM = GPG_ERR_CODE.max + 1;
605 
606 /// See original's library documentation for details.
607 static immutable GPG_ERR_SOURCE_SHIFT  = 24;
608 
609 /// See original's library documentation for details.
610 uint gpg_err_init();
611 
612 shared static this ( ) { gpg_err_init(); }
613 
614 /// See original's library documentation for details.
615 void gpg_err_deinit (int mode);
616 
617 /// See original's library documentation for details.
618 void gpgrt_set_syscall_clamp (void function() pre, void function() post);
619 
620 /// See original's library documentation for details.
621 void gpgrt_set_alloc_func  (void* function(void *a, size_t n) f);
622 
623 
624 /// See original's library documentation for details.
625 uint gpg_err_make(GPG_ERR_SOURCE source, GPG_ERR_CODE code)
626 {
627     return code? (((source & source.MASK) << GPG_ERR_SOURCE_SHIFT) | (code & code.MASK))
628                : code;
629 }
630 
631 
632 /// See original's library documentation for details.
633 gpg_error_t gpg_error (GPG_ERR_CODE code)
634 {
635   return gpg_err_make(GPG_ERR_SOURCE.init, code);
636 }
637 
638 
639 /// See original's library documentation for details.
640 GPG_ERR_CODE gpg_err_code (gpg_error_t err)
641 {
642   return cast(GPG_ERR_CODE)(err & GPG_ERR_CODE.MASK);
643 }
644 
645 
646 /// See original's library documentation for details.
647 GPG_ERR_SOURCE gpg_err_source (gpg_error_t err)
648 {
649   return cast(GPG_ERR_SOURCE)((err >> GPG_ERR_SOURCE_SHIFT) & GPG_ERR_SOURCE.MASK);
650 }
651 
652 /// See original's library documentation for details.
653 Const!(char)* gpg_strerror(gpg_error_t err);
654 
655 /// See original's library documentation for details.
656 int gpg_strerror_r(gpg_error_t err, char* buf, size_t buflen);
657 
658 import ocean.stdc.string;
659 
660 extern (D) int gpg_strerror_r(uint err, ref char[] msg)
661 {
662     verify(msg.length != 0);
663 
664     scope (exit)
665         msg = msg[0 .. strlen(msg.ptr)];
666 
667     return gpg_strerror_r(err, msg.ptr, msg.length);
668 }
669 
670 /// See original's library documentation for details.
671 Const!(char)* gpg_strsource (uint err);
672 
673 /// See original's library documentation for details.
674 GPG_ERR_CODE gpg_err_code_from_errno(int err);
675 
676 
677 /// See original's library documentation for details.
678 int gpg_err_code_to_errno(GPG_ERR_CODE code);
679 
680 
681 /// See original's library documentation for details.
682 GPG_ERR_CODE gpg_err_code_from_syserror();
683 
684 
685 /// See original's library documentation for details.
686 void gpg_err_set_errno(int err);
687 
688 /// See original's library documentation for details.
689 Const!(char)* gpgrt_check_version (Const!(char)* req_version);
690 Const!(char)* gpg_error_check_version(Const!(char)* req_version);