core,cpp: New key flag 'is_de_vs'.
[gpgme.git] / doc / gpgme.texi
1 \input texinfo                   @c -*- mode: texinfo; coding: utf-8; -*-
2 @documentencoding UTF-8
3 @setfilename gpgme.info
4 @include defs.inc
5 @settitle The `GnuPG Made Easy' Reference Manual
6
7 @dircategory GNU Libraries
8 @direntry
9 * @acronym{GPGME}: (gpgme).          Adding support for cryptography to your program.
10 @end direntry
11
12 @c Unify some of the indices.
13 @syncodeindex tp fn
14 @syncodeindex pg fn
15
16 @copying
17 Copyright @copyright{} 2002--2008, 2010, 2012--2016 g10 Code GmbH.
18
19 @quotation
20 Permission is granted to copy, distribute and/or modify this document
21 under the terms of the GNU General Public License as published by the
22 Free Software Foundation; either version 3 of the License, or (at your
23 option) any later version. The text of the license can be found in the
24 section entitled ``Copying''.
25 @end quotation
26
27 This document is distributed in the hope that it will be useful, but
28 WITHOUT ANY WARRANTY; without even the implied warranty of
29 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
30 General Public License for more details.
31 @end copying
32
33 @c Macros used by the description of the UI server protocol
34 @macro clnt{string}
35   @sc{c:} \string\
36 @end macro
37 @macro srvr{string}
38   @sc{s:} \string\
39 @end macro
40
41
42 @c
43 @c  T I T L E  P A G E
44 @c
45 @ifinfo
46 This file documents the @acronym{GPGME} library.
47
48 This is Edition @value{EDITION}, last updated @value{UPDATED}, of
49 @cite{The `GnuPG Made Easy' Reference Manual}, for Version
50 @value{VERSION}.
51
52 @c NOTE: Don't forget to update the year for the TeX version, too.
53 @insertcopying
54
55 @end ifinfo
56
57 @c We do not want that bastard short titlepage.
58 @c @iftex
59 @c @shorttitlepage The `GnuPG Made Easy' Reference Manual
60 @c @end iftex
61 @titlepage
62 @center @titlefont{The `GnuPG Made Easy'}
63 @sp 1
64 @center @titlefont{Reference Manual}
65 @sp 6
66 @center Edition @value{EDITION}
67 @sp 1
68 @center last updated @value{UPDATED}
69 @sp 1
70 @center for version @value{VERSION}
71 @page
72 @vskip 0pt plus 1filll
73 Published by The GnuPG Project@* c/o g10 Code GmbH@* Hüttenstr. 61@* 40699 Erkrath, Germany
74
75 @insertcopying
76 @end titlepage
77 @page
78
79 @summarycontents
80 @contents
81
82 @ifnottex
83 @node Top
84 @top Main Menu
85 This is Edition @value{EDITION}, last updated @value{UPDATED}, of
86 @cite{The `GnuPG Made Easy' Reference Manual}, for Version
87 @value{VERSION} of the @acronym{GPGME} library.
88 @end ifnottex
89
90 @menu
91 * Introduction::                  How to use this manual.
92 * Preparation::                   What you should do before using the library.
93 * Protocols and Engines::         Supported crypto protocols.
94 * Algorithms::                    Supported algorithms.
95 * Error Handling::                Error numbers and their meanings.
96 * Exchanging Data::               Passing data to and from @acronym{GPGME}.
97 * Contexts::                      Handling @acronym{GPGME} contexts.
98
99 Appendices
100
101 * UI Server Protocol::            The GnuPG UI Server Protocol.
102 * Debugging::                     How to solve problems.
103 * Deprecated Functions::          Documentation of deprecated functions.
104
105 * Library Copying::               The GNU Lesser General Public License says
106                                   how you can copy and share `GnuPG Made Easy'.
107 * Copying::                       The GNU General Public License says how you
108                                   can copy and share this manual.
109
110 Indices
111
112 * Concept Index::                 Index of concepts and programs.
113 * Function and Data Index::       Index of functions, variables and data types.
114
115 @detailmenu
116  --- The Detailed Node Listing ---
117
118 Introduction
119
120 * Getting Started::               Purpose of the manual, and how to use it.
121 * Features::                      Reasons to install and use @acronym{GPGME}.
122 * Overview::                      Basic architecture of the @acronym{GPGME} library.
123
124 Preparation
125
126 * Header::                        What header file you need to include.
127 * Building the Source::           Compiler options to be used.
128 * Largefile Support (LFS)::       How to use @acronym{GPGME} with LFS.
129 * Using Automake::                Compiler options to be used the easy way.
130 * Using Libtool::                 Avoiding compiler options entirely.
131 * Library Version Check::         Getting and verifying the library version.
132 * Signal Handling::               How @acronym{GPGME} affects signal handling.
133 * Multi-Threading::               How @acronym{GPGME} can be used in an MT environment.
134
135 Protocols and Engines
136
137 * Engine Version Check::          Verifying the engine version.
138 * Engine Information::            Obtaining more information about the engines.
139 * Engine Configuration::          Changing the engine configuration.
140 * OpenPGP::                       Support for the OpenPGP protocol.
141 * Cryptographic Message Syntax::  Support for the CMS.
142
143 Algorithms
144
145 * Public Key Algorithms::         A list of all public key algorithms.
146 * Hash Algorithms::               A list of all hash algorithms.
147
148 Error Handling
149
150 * Error Values::                  The error value and what it means.
151 * Error Codes::                   A list of important error codes.
152 * Error Sources::                 A list of important error sources.
153 * Error Strings::                 How to get a descriptive string from a value.
154
155 Exchanging Data
156
157 * Creating Data Buffers::         Creating new data buffers.
158 * Destroying Data Buffers::       Releasing data buffers.
159 * Manipulating Data Buffers::     Operations on data buffers.
160
161 Creating Data Buffers
162
163 * Memory Based Data Buffers::     Creating memory based data buffers.
164 * File Based Data Buffers::       Creating file based data buffers.
165 * Callback Based Data Buffers::   Creating callback based data buffers.
166
167 Manipulating Data Buffers
168
169 * Data Buffer I/O Operations::    I/O operations on data buffers.
170 * Data Buffer Meta-Data::         Meta-data manipulation of data buffers.
171 * Data Buffer Convenience::       Convenience function for data buffers.
172
173 Contexts
174
175 * Creating Contexts::             Creating new @acronym{GPGME} contexts.
176 * Destroying Contexts::           Releasing @acronym{GPGME} contexts.
177 * Result Management::             Managing the result of crypto operations.
178 * Context Attributes::            Setting properties of a context.
179 * Key Management::                Managing keys with @acronym{GPGME}.
180 * Trust Item Management::         Managing trust items with @acronym{GPGME}.
181 * Crypto Operations::             Using a context for cryptography.
182 * Miscellaneous::                 Miscellaneous operations.
183 * Run Control::                   Controlling how operations are run.
184
185 Context Attributes
186
187 * Protocol Selection::            Selecting the protocol used by a context.
188 * Crypto Engine::                 Configuring the crypto engine.
189 * Setting the Sender::            How to tell the engine the sender.
190 * ASCII Armor::                   Requesting @acronym{ASCII} armored output.
191 * Text Mode::                     Choosing canonical text mode.
192 * Offline Mode::                  Choosing offline mode.
193 * Included Certificates::         Including a number of certificates.
194 * Key Listing Mode::              Selecting key listing mode.
195 * Passphrase Callback::           Getting the passphrase from the user.
196 * Progress Meter Callback::       Being informed about the progress.
197 * Status Message Callback::       Status messages received from gpg.
198 * Locale::                        Setting the locale of a context.
199
200 Key Management
201
202 * Key objects::                   Description of the key structures.
203 * Listing Keys::                  Browsing the list of available keys.
204 * Information About Keys::        Requesting detailed information about keys.
205 * Manipulating Keys::             Operations on keys.
206 * Generating Keys::               Creating new key pairs.
207 * Signing Keys::                  Adding key signatures to public keys.
208 * Exporting Keys::                Retrieving key data from the key ring.
209 * Importing Keys::                Adding keys to the key ring.
210 * Deleting Keys::                 Removing keys from the key ring.
211 * Changing Passphrases::          Change the passphrase of a key.
212 * Changing TOFU Data::            Changing data pertaining to TOFU.
213 * Advanced Key Editing::          Advanced key edit operation.
214
215 Trust Item Management
216
217 * Listing Trust Items::           Browsing the list of available trust items.
218 * Manipulating Trust Items::      Operations on trust items.
219
220 Crypto Operations
221
222 * Decrypt::                       Decrypting a ciphertext.
223 * Verify::                        Verifying a signature.
224 * Decrypt and Verify::            Decrypting a signed ciphertext.
225 * Sign::                          Creating a signature.
226 * Encrypt::                       Encrypting a plaintext.
227
228 Sign
229
230 * Selecting Signers::             How to choose the keys to sign with.
231 * Creating a Signature::          How to create a signature.
232 * Signature Notation Data::       How to add notation data to a signature.
233
234 Encrypt
235
236 * Encrypting a Plaintext::        How to encrypt a plaintext.
237
238 Miscellaneous
239
240 * Running other Programs::        Running other Programs.
241 * Using the Assuan protocol::     Using the Assuan protocol.
242 * Checking for updates::          How to check for software updates.
243
244 Run Control
245
246 * Waiting For Completion::        Waiting until an operation is completed.
247 * Using External Event Loops::    Advanced control over what happens when.
248 * Cancellation::                  How to end pending operations prematurely.
249
250 Using External Event Loops
251
252 * I/O Callback Interface::        How I/O callbacks are registered.
253 * Registering I/O Callbacks::     How to use I/O callbacks for a context.
254 * I/O Callback Example::          An example how to use I/O callbacks.
255 * I/O Callback Example GTK+::     How to integrate @acronym{GPGME} in GTK+.
256 * I/O Callback Example GDK::      How to integrate @acronym{GPGME} in GDK.
257 * I/O Callback Example Qt::       How to integrate @acronym{GPGME} in Qt.
258
259 @end detailmenu
260 @end menu
261
262 @node Introduction
263 @chapter Introduction
264
265 `GnuPG Made Easy' (@acronym{GPGME}) is a C language library that
266 allows to add support for cryptography to a program.  It is designed
267 to make access to public key crypto engines like GnuPG or GpgSM easier
268 for applications.  @acronym{GPGME} provides a high-level crypto API
269 for encryption, decryption, signing, signature verification and key
270 management.
271
272 @acronym{GPGME} uses GnuPG and GpgSM as its backends to support
273 OpenPGP and the Cryptographic Message Syntax (CMS).
274
275 @menu
276 * Getting Started::               Purpose of the manual, and how to use it.
277 * Features::                      Reasons to install and use @acronym{GPGME}.
278 * Overview::                      Basic architecture of the @acronym{GPGME} library.
279 @end menu
280
281
282 @node Getting Started
283 @section Getting Started
284
285 This manual documents the @acronym{GPGME} library programming
286 interface.  All functions and data types provided by the library are
287 explained.
288
289 The reader is assumed to possess basic knowledge about cryptography in
290 general, and public key cryptography in particular.  The underlying
291 cryptographic engines that are used by the library are not explained,
292 but where necessary, special features or requirements by an engine are
293 mentioned as far as they are relevant to @acronym{GPGME} or its users.
294
295 This manual can be used in several ways.  If read from the beginning
296 to the end, it gives a good introduction into the library and how it
297 can be used in an application.  Forward references are included where
298 necessary.  Later on, the manual can be used as a reference manual to
299 get just the information needed about any particular interface of the
300 library.  Experienced programmers might want to start looking at the
301 examples at the end of the manual, and then only read up those parts
302 of the interface which are unclear.
303
304 The documentation for the language bindings is currently not included
305 in this manual.  Those languages bindings follow the general
306 programming model of @acronym{GPGME} but may provide some extra high
307 level abstraction on top of the @acronym{GPGME} style API.  For now
308 please see the README files in the @file{lang/} directory of the
309 source distribution.
310
311
312 @node Features
313 @section Features
314
315 @acronym{GPGME} has a couple of advantages over other libraries doing
316 a similar job, and over implementing support for GnuPG or other crypto
317 engines into your application directly.
318
319 @table @asis
320 @item it's free software
321 Anybody can use, modify, and redistribute it under the terms of the GNU
322 Lesser General Public License (@pxref{Library Copying}).
323
324 @item it's flexible
325 @acronym{GPGME} provides transparent support for several cryptographic
326 protocols by different engines.  Currently, @acronym{GPGME} supports
327 the OpenPGP protocol using GnuPG as the backend, and the Cryptographic
328 Message Syntax using GpgSM as the backend.
329
330 @item it's easy
331 @acronym{GPGME} hides the differences between the protocols and
332 engines from the programmer behind an easy-to-use interface.  This way
333 the programmer can focus on the other parts of the program, and still
334 integrate strong cryptography in his application.  Once support for
335 @acronym{GPGME} has been added to a program, it is easy to add support
336 for other crypto protocols once @acronym{GPGME} backends provide them.
337
338 @item it's language friendly
339 @acronym{GPGME} comes with languages bindings for several common
340 programming languages: Common Lisp, C++, Python 2, and Python 3.
341 @end table
342
343 @node Overview
344 @section Overview
345
346 @acronym{GPGME} provides a data abstraction that is used to pass data
347 to the crypto engine, and receive returned data from it.  Data can be
348 read from memory or from files, but it can also be provided by a
349 callback function.
350
351 The actual cryptographic operations are always set within a context.
352 A context provides configuration parameters that define the behaviour
353 of all operations performed within it.  Only one operation per context
354 is allowed at any time, but when one operation is finished, you can
355 run the next operation in the same context.  There can be more than
356 one context, and all can run different operations at the same time.
357
358 Furthermore, @acronym{GPGME} has rich key management facilities
359 including listing keys, querying their attributes, generating,
360 importing, exporting and deleting keys, and acquiring information
361 about the trust path.
362
363 With some precautions, @acronym{GPGME} can be used in a multi-threaded
364 environment, although it is not completely thread safe and thus needs
365 the support of the application.
366
367
368 @node Preparation
369 @chapter Preparation
370
371 To use @acronym{GPGME}, you have to perform some changes to your
372 sources and the build system.  The necessary changes are small and
373 explained in the following sections.  At the end of this chapter, it
374 is described how the library is initialized, and how the requirements
375 of the library are verified.
376
377 @menu
378 * Header::                        What header file you need to include.
379 * Building the Source::           Compiler options to be used.
380 * Largefile Support (LFS)::       How to use @acronym{GPGME} with LFS.
381 * Using Automake::                Compiler options to be used the easy way.
382 * Using Libtool::                 Avoiding compiler options entirely.
383 * Library Version Check::         Getting and verifying the library version.
384 * Signal Handling::               How @acronym{GPGME} affects signal handling.
385 * Multi-Threading::               How @acronym{GPGME} can be used in an MT environment.
386 @end menu
387
388
389 @node Header
390 @section Header
391 @cindex header file
392 @cindex include file
393
394 All interfaces (data types and functions) of the library are defined
395 in the header file `gpgme.h'.  You must include this in all programs
396 using the library, either directly or through some other header file,
397 like this:
398
399 @example
400 #include <gpgme.h>
401 @end example
402
403 The name space of @acronym{GPGME} is @code{gpgme_*} for function names
404 and data types and @code{GPGME_*} for other symbols.  Symbols internal
405 to @acronym{GPGME} take the form @code{_gpgme_*} and @code{_GPGME_*}.
406
407 Because @acronym{GPGME} makes use of the GPG Error library, using
408 @acronym{GPGME} will also use the @code{GPG_ERR_*} name space
409 directly, and the @code{gpg_err*}, @code{gpg_str*}, and @code{gpgrt_*}
410 name space indirectly.
411
412
413 @node Building the Source
414 @section Building the Source
415 @cindex compiler options
416 @cindex compiler flags
417
418 If you want to compile a source file including the `gpgme.h' header
419 file, you must make sure that the compiler can find it in the
420 directory hierarchy.  This is accomplished by adding the path to the
421 directory in which the header file is located to the compilers include
422 file search path (via the @option{-I} option).
423
424 However, the path to the include file is determined at the time the
425 source is configured.  To solve this problem, gpgme ships with a small
426 helper program @command{gpgme-config} that knows about the path to the
427 include file and other configuration options.  The options that need
428 to be added to the compiler invocation at compile time are output by
429 the @option{--cflags} option to @command{gpgme-config}.  The following
430 example shows how it can be used at the command line:
431
432 @example
433 gcc -c foo.c `gpgme-config --cflags`
434 @end example
435
436 Adding the output of @samp{gpgme-config --cflags} to the compiler
437 command line will ensure that the compiler can find the
438 @acronym{GPGME} header file.
439
440 A similar problem occurs when linking the program with the library.
441 Again, the compiler has to find the library files.  For this to work,
442 the path to the library files has to be added to the library search
443 path (via the @option{-L} option).  For this, the option
444 @option{--libs} to @command{gpgme-config} can be used.  For
445 convenience, this option also outputs all other options that are
446 required to link the program with @acronym{GPGME} (in particular, the
447 @samp{-lgpgme} option).  The example shows how to link @file{foo.o}
448 with the @acronym{GPGME} library to a program @command{foo}.
449
450 @example
451 gcc -o foo foo.o `gpgme-config --libs`
452 @end example
453
454 Of course you can also combine both examples to a single command by
455 specifying both options to @command{gpgme-config}:
456
457 @example
458 gcc -o foo foo.c `gpgme-config --cflags --libs`
459 @end example
460
461 If you need to detect the installed language bindings you can use list
462 them using:
463
464 @example
465 gpgme-config --print-lang
466 @end example
467
468 or test for the availability using
469
470 @example
471 gpgme-config --have-lang=python && echo 'Bindings for Pythons available'
472 @end example
473
474
475 @node Largefile Support (LFS)
476 @section Largefile Support (LFS)
477 @cindex largefile support
478 @cindex LFS
479
480 @acronym{GPGME} is compiled with largefile support by default, if it
481 is available on the system.  This means that GPGME supports files
482 larger than two gigabyte in size, if the underlying operating system
483 can.  On some systems, largefile support is already the default.  On
484 such systems, nothing special is required.  However, some systems
485 provide only support for files up to two gigabyte in size by default.
486 Support for larger file sizes has to be specifically enabled.
487
488 To make a difficult situation even more complex, such systems provide
489 two different types of largefile support.  You can either get all
490 relevant functions replaced with alternatives that are largefile
491 capable, or you can get new functions and data types for largefile
492 support added.  Those new functions have the same name as their
493 smallfile counterparts, but with a suffix of 64.
494
495 An example: The data type @code{off_t} is 32 bit wide on GNU/Linux PC
496 systems.  To address offsets in large files, you can either enable
497 largefile support add-on.  Then a new data type @code{off64_t} is
498 provided, which is 64 bit wide.  Or you can replace the existing
499 @code{off_t} data type with its 64 bit wide counterpart.  All
500 occurences of @code{off_t} are then automagically replaced.
501
502 As if matters were not complex enough, there are also two different
503 types of file descriptors in such systems.  This is important because
504 if file descriptors are exchanged between programs that use a
505 different maximum file size, certain errors must be produced on some
506 file descriptors to prevent subtle overflow bugs from occuring.
507
508 As you can see, supporting two different maximum file sizes at the
509 same time is not at all an easy task.  However, the maximum file size
510 does matter for @acronym{GPGME}, because some data types it uses in
511 its interfaces are affected by that.  For example, the @code{off_t}
512 data type is used in the @code{gpgme_data_seek} function, to match its
513 @acronym{POSIX} counterpart.  This affects the call-frame of the
514 function, and thus the ABI of the library.  Furthermore, file
515 descriptors can be exchanged between GPGME and the application.
516
517 For you as the user of the library, this means that your program must
518 be compiled in the same file size mode as the library.  Luckily, there
519 is absolutely no valid reason for new programs to not enable largefile
520 support by default and just use that.  The compatibility modes (small
521 file sizes or dual mode) can be considered an historic artefact, only
522 useful to allow for a transitional period.
523
524 On POSIX platforms @acronym{GPGME} is compiled using largefile support
525 by default.  This means that your application must do the same, at
526 least as far as it is relevant for using the @file{gpgme.h} header
527 file.  All types in this header files refer to their largefile
528 counterparts, if they are different from any default types on the
529 system.
530
531 On 32 and 64 bit Windows platforms @code{off_t} is declared as 32 bit
532 signed integer.  There is no specific support for LFS in the C
533 library.  The recommendation from Microsoft is to use the native
534 interface (@code{CreateFile} et al.) for large files.  Released binary
535 versions of @acronym{GPGME} (libgpgme-11.dll) have always been build
536 with a 32 bit @code{off_t}.  To avoid an ABI break we stick to this
537 convention for 32 bit Windows by using @code{long} there.
538 @acronym{GPGME} versions for 64 bit Windows have never been released
539 and thus we are able to use @code{int64_t} instead of @code{off_t}
540 there.  For easier migration the typedef @code{gpgme_off_t} has been
541 defined.  The reason we cannot use @code{off_t} directly is that some
542 toolchains (e.g. mingw64) introduce a POSIX compatible hack for
543 @code{off_t}.  Some widely used toolkits make use of this hack and in
544 turn @acronym{GPGME} would need to use it also.  However, this would
545 introduce an ABI break and existing software making use of libgpgme
546 might suffer from a severe break.  Thus with version 1.4.2 we
547 redefined all functions using @code{off_t} to use @code{gpgme_off_t}
548 which is defined as explained above.  This way we keep the ABI well
549 defined and independent of any toolchain hacks.  The bottom line is
550 that LFS support in @acronym{GPGME} is only available on 64 bit
551 versions of Windows.
552
553 On POSIX platforms you can enable largefile support, if it is
554 different from the default on the system the application is compiled
555 on, by using the Autoconf macro @code{AC_SYS_LARGEFILE}.  If you do
556 this, then you don't need to worry about anything else: It will just
557 work.  In this case you might also want to use @code{AC_FUNC_FSEEKO}
558 to take advantage of some new interfaces, and @code{AC_TYPE_OFF_T}
559 (just in case).
560
561 If you do not use Autoconf, you can define the preprocessor symbol
562 @code{_FILE_OFFSET_BITS} to 64 @emph{before} including any header
563 files, for example by specifying the option
564 @code{-D_FILE_OFFSET_BITS=64} on the compiler command line.  You will
565 also want to define the preprocessor symbol @code{LARGEFILE_SOURCE} to
566 1 in this case, to take advantage of some new interfaces.
567
568 If you do not want to do either of the above, you probably know enough
569 about the issue to invent your own solution.  Just keep in mind that
570 the @acronym{GPGME} header file expects that largefile support is
571 enabled, if it is available.  In particular, we do not support dual
572 mode (@code{_LARGEFILE64_SOURCE}).
573
574
575 @node Using Automake
576 @section Using Automake
577 @cindex automake
578 @cindex autoconf
579
580 It is much easier if you use GNU Automake instead of writing your own
581 Makefiles.  If you do that you do not have to worry about finding and
582 invoking the @command{gpgme-config} script at all.  @acronym{GPGME}
583 provides an extension to Automake that does all the work for you.
584
585 @c A simple macro for optional variables.
586 @macro ovar{varname}
587 @r{[}@var{\varname\}@r{]}
588 @end macro
589 @defmac AM_PATH_GPGME (@ovar{minimum-version}, @ovar{action-if-found}, @ovar{action-if-not-found})
590 @defmacx AM_PATH_GPGME_PTH (@ovar{minimum-version}, @ovar{action-if-found}, @ovar{action-if-not-found})
591 @defmacx AM_PATH_GPGME_PTHREAD (@ovar{minimum-version}, @ovar{action-if-found}, @ovar{action-if-not-found})
592 Check whether @acronym{GPGME} (at least version @var{minimum-version},
593 if given) exists on the host system.  If it is found, execute
594 @var{action-if-found}, otherwise do @var{action-if-not-found}, if
595 given.
596
597 Additionally, the function defines @code{GPGME_CFLAGS} to the flags
598 needed for compilation of the program to find the @file{gpgme.h}
599 header file, and @code{GPGME_LIBS} to the linker flags needed to link
600 the program to the @acronym{GPGME} library.  If the used helper script
601 does not match the target type you are building for a warning is
602 printed and the string @code{libgcrypt} is appended to the variable
603 @code{gpg_config_script_warn}.
604
605 @code{AM_PATH_GPGME_PTH} checks for the version of @acronym{GPGME}
606 that can be used with GNU Pth, and defines @code{GPGME_PTH_CFLAGS} and
607 @code{GPGME_PTH_LIBS}.
608
609 @code{AM_PATH_GPGME_PTHREAD} checks for the version of @acronym{GPGME}
610 that can be used with the native pthread implementation, and defines
611 @code{GPGME_PTHREAD_CFLAGS} and @code{GPGME_PTHREAD_LIBS}. Since
612 version 1.8.0 this is no longer required to GPGME_PTHREAD as
613 @acronym{GPGME} itself is thread safe.
614
615 This macro searches for @command{gpgme-config} along the PATH.  If
616 you are cross-compiling, it is useful to set the environment variable
617 @code{SYSROOT} to the top directory of your target.  The macro will
618 then first look for the helper program in the @file{bin} directory
619 below that top directory.  An absolute directory name must be used for
620 @code{SYSROOT}.  Finally, if the configure command line option
621 @code{--with-gpgme-prefix} is used, only its value is used for the top
622 directory below which the helper script is expected.
623
624 @end defmac
625
626 You can use the defined Autoconf variables like this in your
627 @file{Makefile.am}:
628
629 @example
630 AM_CPPFLAGS = $(GPGME_CFLAGS)
631 LDADD = $(GPGME_LIBS)
632 @end example
633
634
635 @node Using Libtool
636 @section Using Libtool
637 @cindex libtool
638
639 The easiest way is to just use GNU Libtool.  If you use libtool, and
640 link to @code{libgpgme.la}, @code{libgpgme-pth.la} or
641 @code{libgpgme-pthread.la} respectively, everything will be done
642 automatically by Libtool.
643
644
645 @node Library Version Check
646 @section Library Version Check
647 @cindex version check, of the library
648
649 @deftypefun {const char *} gpgme_check_version (@w{const char *@var{required_version}})
650 The function @code{gpgme_check_version} has four purposes.  It can be
651 used to retrieve the version number of the library.  In addition it
652 can verify that the version number is higher than a certain required
653 version number.  In either case, the function initializes some
654 sub-systems, and for this reason alone it must be invoked early in
655 your program, before you make use of the other functions in
656 @acronym{GPGME}.  The last purpose is to run selftests.
657
658 As a side effect for W32 based systems, the socket layer will get
659 initialized.
660
661
662 If @var{required_version} is @code{NULL}, the function returns a
663 pointer to a statically allocated string containing the version number
664 of the library.
665
666 If @var{required_version} is not @code{NULL}, it should point to a
667 string containing a version number, and the function checks that the
668 version of the library is at least as high as the version number
669 provided.  In this case, the function returns a pointer to a
670 statically allocated string containing the version number of the
671 library.  If @var{REQUIRED_VERSION} is not a valid version number, or
672 if the version requirement is not met, the function returns
673 @code{NULL}.
674
675 If you use a version of a library that is backwards compatible with
676 older releases, but contains additional interfaces which your program
677 uses, this function provides a run-time check if the necessary
678 features are provided by the installed version of the library.
679
680 If a selftest fails, the function may still succeed.  Selftest errors
681 are returned later when invoking @code{gpgme_new}, so that a detailed
682 error code can be returned (historically, @code{gpgme_check_version}
683 does not return a detailed error code).
684 @end deftypefun
685
686
687 @deftypefun {int} gpgme_set_global_flag  @
688             (@w{const char *@var{name}}, @
689             @w{const char *@var{value}})
690
691 On some systems it is not easy to set environment variables and thus
692 hard to use @acronym{GPGME}'s internal trace facility for debugging.
693 This function has been introduced as an alternative way to enable
694 debugging and for a couple of other rarely used tweaks.  It is
695 important to assure that only one thread accesses @acronym{GPGME}
696 functions between a call to this function and after the return from
697 the call to @code{gpgme_check_version}.
698
699 All currently supported features require that this function is called
700 as early as possible --- even before @code{gpgme_check_version}.  The
701 features are identified by the following values for @var{name}:
702
703 @table @code
704 @item debug
705 To enable debugging use the string ``debug'' for @var{name} and
706 @var{value} identical to the value used with the environment variable
707 @code{GPGME_DEBUG}.
708
709 @item disable-gpgconf
710 Using this feature with any @var{value} disables the detection of the
711 gpgconf program and thus forces GPGME to fallback into the simple
712 OpenPGP only mode.  It may be used to force the use of GnuPG-1 on
713 systems which have both GPG versions installed.  Note that in general
714 the use of @code{gpgme_set_engine_info} is a better way to select a
715 specific engine version.
716
717 @item gpgconf-name
718 @itemx gpg-name
719 Set the name of the gpgconf respective gpg binary.  The defaults are
720 @code{GNU/GnuPG/gpgconf} and @code{GNU/GnuPG/gpg}.  Under Unix the
721 leading directory part is ignored.  Under Windows the leading
722 directory part is used as the default installation directory; the
723 @code{.exe} suffix is added by GPGME.  Use forward slashed even under
724 Windows.
725
726 @item require-gnupg
727 Set the mimimum version of the required GnuPG engine.  If that version
728 is not met, GPGME fails early instead of trying to use the existant
729 version.  The given version must be a string with major, minor, and
730 micro number.  Example: "2.1.0".
731
732 @item w32-inst-dir
733 On Windows GPGME needs to know its installation directory to find its
734 spawn helper.  This is in general no problem because a DLL has this
735 information.  Some applications however link statically to GPGME and
736 thus GPGME can only figure out the installation directory of this
737 application which may be wrong in certain cases.  By supplying an
738 installation directory as value to this flag, GPGME will assume that
739 that directory is the installation directory.  This flag has no effect
740 on non-Windows platforms.
741
742 @end table
743
744 This function returns @code{0} on success.  In contrast to other
745 functions the non-zero return value on failure does not convey any
746 error code.  For setting ``debug'' the only possible error cause is an
747 out of memory condition; which would exhibit itself later anyway.
748 Thus the return value may be ignored.
749 @end deftypefun
750
751
752 After initializing @acronym{GPGME}, you should set the locale
753 information to the locale required for your output terminal.  This
754 locale information is needed for example for the curses and Gtk
755 pinentry.  Here is an example of a complete initialization:
756
757 @example
758 #include <locale.h>
759 #include <gpgme.h>
760
761 void
762 init_gpgme (void)
763 @{
764   /* Initialize the locale environment.  */
765   setlocale (LC_ALL, "");
766   gpgme_check_version (NULL);
767   gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
768 #ifdef LC_MESSAGES
769   gpgme_set_locale (NULL, LC_MESSAGES, setlocale (LC_MESSAGES, NULL));
770 #endif
771 @}
772 @end example
773
774 Note that you are highly recommended to initialize the locale settings
775 like this.  @acronym{GPGME} can not do this for you because it would
776 not be thread safe.  The conditional on LC_MESSAGES is only necessary
777 for portability to W32 systems.
778
779
780 @node Signal Handling
781 @section Signal Handling
782 @cindex signals
783 @cindex signal handling
784
785 The @acronym{GPGME} library communicates with child processes (the
786 crypto engines).  If a child process dies unexpectedly, for example
787 due to a bug, or system problem, a @code{SIGPIPE} signal will be
788 delivered to the application.  The default action is to abort the
789 program.  To protect against this, @code{gpgme_check_version} sets the
790 @code{SIGPIPE} signal action to @code{SIG_IGN}, which means that the
791 signal will be ignored.
792
793 @acronym{GPGME} will only do that if the signal action for
794 @code{SIGPIPE} is @code{SIG_DEF} at the time
795 @code{gpgme_check_version} is called.  If it is something different,
796 @code{GPGME} will take no action.
797
798 This means that if your application does not install any signal
799 handler for @code{SIGPIPE}, you don't need to take any precautions.
800 If you do install a signal handler for @code{SIGPIPE}, you must be
801 prepared to handle any @code{SIGPIPE} events that occur due to
802 @acronym{GPGME} writing to a defunct pipe.  Furthermore, if your
803 application is multi-threaded, and you install a signal action for
804 @code{SIGPIPE}, you must make sure you do this either before
805 @code{gpgme_check_version} is called or afterwards.
806
807
808 @node Multi-Threading
809 @section Multi-Threading
810 @cindex thread-safeness
811 @cindex multi-threading
812
813 The @acronym{GPGME} library is mostly thread-safe, and can be used
814 in a multi-threaded environment but there are some requirements
815 for multi-threaded use:
816
817 @itemize @bullet
818 @item
819 The function @code{gpgme_check_version} must be called before any
820 other function in the library, because it initializes the thread
821 support subsystem in @acronym{GPGME}.  To achieve this in
822 multi-threaded programs, you must synchronize the memory with respect
823 to other threads that also want to use @acronym{GPGME}.  For this, it
824 is sufficient to call @code{gpgme_check_version} before creating the
825 other threads using @acronym{GPGME}@footnote{At least this is true for
826 POSIX threads, as @code{pthread_create} is a function that
827 synchronizes memory with respects to other threads.  There are many
828 functions which have this property, a complete list can be found in
829 POSIX, IEEE Std 1003.1-2003, Base Definitions, Issue 6, in the
830 definition of the term ``Memory Synchronization''.  For other thread
831 packages other, more relaxed or more strict rules may apply.}.
832
833 @item
834 Any @code{gpgme_data_t} and @code{gpgme_ctx_t} object must only be
835 accessed by one thread at a time.  If multiple threads want to deal
836 with the same object, the caller has to make sure that operations on
837 that object are fully synchronized.
838
839 @item
840 Only one thread at any time is allowed to call @code{gpgme_wait}.  If
841 multiple threads call this function, the caller must make sure that
842 all invocations are fully synchronized.  It is safe to start
843 asynchronous operations while a thread is running in gpgme_wait.
844
845 @item
846 The function @code{gpgme_strerror} is not thread safe.  You have to
847 use @code{gpgme_strerror_r} instead.
848 @end itemize
849
850
851 @node Protocols and Engines
852 @chapter Protocols and Engines
853 @cindex protocol
854 @cindex engine
855 @cindex crypto engine
856 @cindex backend
857 @cindex crypto backend
858
859 @acronym{GPGME} supports several cryptographic protocols, however, it
860 does not implement them.  Rather it uses backends (also called
861 engines) which implement the protocol.  @acronym{GPGME} uses
862 inter-process communication to pass data back and forth between the
863 application and the backend, but the details of the communication
864 protocol and invocation of the backend is completely hidden by the
865 interface.  All complexity is handled by @acronym{GPGME}.  Where an
866 exchange of information between the application and the backend is
867 necessary, @acronym{GPGME} provides the necessary callback function
868 hooks and further interfaces.
869
870 @deftp {Data type} {enum gpgme_protocol_t}
871 @tindex gpgme_protocol_t
872 The @code{gpgme_protocol_t} type specifies the set of possible protocol
873 values that are supported by @acronym{GPGME}.  The following protocols
874 are supported:
875
876 @table @code
877 @item GPGME_PROTOCOL_OpenPGP
878 This specifies the OpenPGP protocol.
879
880 @item GPGME_PROTOCOL_CMS
881 This specifies the Cryptographic Message Syntax.
882
883 @item GPGME_PROTOCOL_GPGCONF
884 Under development.  Please ask on @email{gnupg-devel@@gnupg.org} for help.
885
886 @item GPGME_PROTOCOL_ASSUAN
887 This specifies the raw Assuan protocol.
888
889 @item GPGME_PROTOCOL_G13
890 Under development.  Please ask on @email{gnupg-devel@@gnupg.org} for help.
891
892 @item GPGME_PROTOCOL_UISERVER
893 Under development.  Please ask on @email{gnupg-devel@@gnupg.org} for help.
894
895 @item GPGME_PROTOCOL_SPAWN
896 Special protocol for use with @code{gpgme_op_spawn}.
897
898 @item GPGME_PROTOCOL_UNKNOWN
899 Reserved for future extension.  You may use this to indicate that the
900 used protocol is not known to the application.  Currently,
901 @acronym{GPGME} does not accept this value in any operation, though,
902 except for @code{gpgme_get_protocol_name}.
903 @end table
904 @end deftp
905
906
907 @deftypefun {const char *} gpgme_get_protocol_name (@w{gpgme_protocol_t @var{protocol}})
908 The function @code{gpgme_get_protocol_name} returns a statically
909 allocated string describing the protocol @var{protocol}, or
910 @code{NULL} if the protocol number is not valid.
911 @end deftypefun
912
913 @menu
914 * Engine Version Check::          Verifying the engine version.
915 * Engine Information::            Obtaining more information about the engines.
916 * Engine Configuration::          Changing the engine configuration.
917 * OpenPGP::                       Support for the OpenPGP protocol.
918 * Cryptographic Message Syntax::  Support for the CMS.
919 * Assuan::                        Support for the raw Assuan protocol.
920 @end menu
921
922
923 @node Engine Version Check
924 @section Engine Version Check
925 @cindex version check, of the engines
926
927 @deftypefun @w{const char *} gpgme_get_dirinfo (@w{cons char *@var{what}})
928 The function @code{gpgme_get_dirinfo} returns a statically allocated
929 string with the value associated to @var{what}.  The returned values
930 are the defaults and won't change even after
931 @code{gpgme_set_engine_info} has been used to configure a different
932 engine.  @code{NULL} is returned if no value is available.  Commonly
933 supported values for @var{what} are:
934
935 @table @code
936 @item homedir
937 Return the default home directory.
938
939 @item sysconfdir
940 Return the name of the system configuration directory
941
942 @item bindir
943 Return the name of the directory with GnuPG program files.
944
945 @item libdir
946 Return the name of the directory with GnuPG related library files.
947
948 @item libexecdir
949 Return the name of the directory with GnuPG helper program files.
950
951 @item datadir
952 Return the name of the directory with GnuPG shared data.
953
954 @item localedir
955 Return the name of the directory with GnuPG locale data.
956
957 @item agent-socket
958 Return the name of the socket to connect to the gpg-agent.
959
960 @item agent-ssh-socket
961 Return the name of the socket to connect to the ssh-agent component of
962 gpg-agent.
963
964 @item dirmngr-socket
965 Return the name of the socket to connect to the dirmngr.
966
967 @item uiserver-socket
968 Return the name of the socket to connect to the user interface server.
969
970 @item gpgconf-name
971 Return the file name of the engine configuration tool.
972
973 @item gpg-name
974 Return the file name of the OpenPGP engine.
975
976 @item gpgsm-name
977 Return the file name of the CMS engine.
978
979 @item g13-name
980 Return the name of the file container encryption engine.
981
982 @end table
983
984 @end deftypefun
985
986
987 @deftypefun gpgme_error_t gpgme_engine_check_version (@w{gpgme_protocol_t @var{protocol}})
988 The function @code{gpgme_engine_check_version} verifies that the
989 engine implementing the protocol @var{PROTOCOL} is installed in the
990 expected path and meets the version requirement of @acronym{GPGME}.
991
992 This function returns the error code @code{GPG_ERR_NO_ERROR} if the
993 engine is available and @code{GPG_ERR_INV_ENGINE} if it is not.
994 @end deftypefun
995
996
997 @node Engine Information
998 @section Engine Information
999 @cindex engine, information about
1000
1001 @deftp {Data type} {gpgme_engine_info_t}
1002 @tindex gpgme_protocol_t
1003 The @code{gpgme_engine_info_t} type specifies a pointer to a structure
1004 describing a crypto engine.  The structure contains the following
1005 elements:
1006
1007 @table @code
1008 @item gpgme_engine_info_t next
1009 This is a pointer to the next engine info structure in the linked
1010 list, or @code{NULL} if this is the last element.
1011
1012 @item gpgme_protocol_t protocol
1013 This is the protocol for which the crypto engine is used.  You can
1014 convert this to a string with @code{gpgme_get_protocol_name} for
1015 printing.
1016
1017 @item const char *file_name
1018 This is a string holding the file name of the executable of the crypto
1019 engine.  Currently, it is never @code{NULL}, but using @code{NULL} is
1020 reserved for future use, so always check before you use it.
1021
1022 @item const char *home_dir
1023 This is a string holding the directory name of the crypto engine's
1024 configuration directory.  If it is @code{NULL}, then the default
1025 directory is used.  See @code{gpgme_get_dirinfo} on how to get the
1026 default directory.
1027
1028 @item const char *version
1029 This is a string containing the version number of the crypto engine.
1030 It might be @code{NULL} if the version number can not be determined,
1031 for example because the executable doesn't exist or is invalid.
1032
1033 @item const char *req_version
1034 This is a string containing the minimum required version number of the
1035 crypto engine for @acronym{GPGME} to work correctly.  This is the
1036 version number that @code{gpgme_engine_check_version} verifies
1037 against.  Currently, it is never @code{NULL}, but using @code{NULL} is
1038 reserved for future use, so always check before you use it.
1039 @end table
1040 @end deftp
1041
1042 @deftypefun gpgme_error_t gpgme_get_engine_info (@w{gpgme_engine_info_t *@var{info}})
1043 The function @code{gpgme_get_engine_info} returns a linked list of
1044 engine info structures in @var{info}.  Each info structure describes
1045 the defaults of one configured backend.
1046
1047 The memory for the info structures is allocated the first time this
1048 function is invoked, and must not be freed by the caller.
1049
1050 This function returns the error code @code{GPG_ERR_NO_ERROR} if
1051 successful, and a system error if the memory could not be allocated.
1052 @end deftypefun
1053
1054 Here is an example how you can provide more diagnostics if you receive
1055 an error message which indicates that the crypto engine is invalid.
1056
1057 @example
1058 gpgme_ctx_t ctx;
1059 gpgme_error_t err;
1060
1061 [...]
1062
1063 if (gpgme_err_code (err) == GPG_ERR_INV_ENGINE)
1064   @{
1065     gpgme_engine_info_t info;
1066     err = gpgme_get_engine_info (&info);
1067     if (!err)
1068       @{
1069         while (info && info->protocol != gpgme_get_protocol (ctx))
1070           info = info->next;
1071         if (!info)
1072           fprintf (stderr, "GPGME compiled without support for protocol %s",
1073                    gpgme_get_protocol_name (info->protocol));
1074         else if (info->file_name && !info->version)
1075           fprintf (stderr, "Engine %s not installed properly",
1076                    info->file_name);
1077         else if (info->file_name && info->version && info->req_version)
1078           fprintf (stderr, "Engine %s version %s installed, "
1079                    "but at least version %s required", info->file_name,
1080                    info->version, info->req_version);
1081         else
1082           fprintf (stderr, "Unknown problem with engine for protocol %s",
1083                    gpgme_get_protocol_name (info->protocol));
1084       @}
1085   @}
1086 @end example
1087
1088
1089 @node Engine Configuration
1090 @section Engine Configuration
1091 @cindex engine, configuration of
1092 @cindex configuration of crypto backend
1093
1094 You can change the configuration of a backend engine, and thus change
1095 the executable program and configuration directory to be used.  You
1096 can make these changes the default or set them for some contexts
1097 individually.
1098
1099 @deftypefun gpgme_error_t gpgme_set_engine_info (@w{gpgme_protocol_t @var{proto}}, @w{const char *@var{file_name}}, @w{const char *@var{home_dir}})
1100 The function @code{gpgme_set_engine_info} changes the default
1101 configuration of the crypto engine implementing the protocol
1102 @var{proto}.
1103
1104 @var{file_name} is the file name of the executable program
1105 implementing this protocol, and @var{home_dir} is the directory name
1106 of the configuration directory for this crypto engine.  If
1107 @var{home_dir} is @code{NULL}, the engine's default will be used.
1108
1109 The new defaults are not applied to already created GPGME contexts.
1110
1111 This function returns the error code @code{GPG_ERR_NO_ERROR} if
1112 successful, or an eror code on failure.
1113 @end deftypefun
1114
1115 The functions @code{gpgme_ctx_get_engine_info} and
1116 @code{gpgme_ctx_set_engine_info} can be used to change the engine
1117 configuration per context.  @xref{Crypto Engine}.
1118
1119
1120 @node OpenPGP
1121 @section OpenPGP
1122 @cindex OpenPGP
1123 @cindex GnuPG
1124 @cindex protocol, GnuPG
1125 @cindex engine, GnuPG
1126
1127 OpenPGP is implemented by GnuPG, the @acronym{GNU} Privacy Guard.
1128 This is the first protocol that was supported by @acronym{GPGME}.
1129
1130 The OpenPGP protocol is specified by @code{GPGME_PROTOCOL_OpenPGP}.
1131
1132
1133 @node Cryptographic Message Syntax
1134 @section Cryptographic Message Syntax
1135 @cindex CMS
1136 @cindex cryptographic message syntax
1137 @cindex GpgSM
1138 @cindex protocol, CMS
1139 @cindex engine, GpgSM
1140 @cindex S/MIME
1141 @cindex protocol, S/MIME
1142
1143 @acronym{CMS} is implemented by GpgSM, the S/MIME implementation for
1144 GnuPG.
1145
1146 The @acronym{CMS} protocol is specified by @code{GPGME_PROTOCOL_CMS}.
1147
1148
1149 @node Assuan
1150 @section Assuan
1151 @cindex ASSUAN
1152 @cindex protocol, ASSUAN
1153 @cindex engine, ASSUAN
1154
1155 Assuan is the RPC library used by the various @acronym{GnuPG}
1156 components.  The Assuan protocol allows one to talk to arbitrary
1157 Assuan servers using @acronym{GPGME}.  @xref{Using the Assuan
1158 protocol}.
1159
1160 The ASSUAN protocol is specified by @code{GPGME_PROTOCOL_ASSUAN}.
1161
1162
1163 @node Algorithms
1164 @chapter Algorithms
1165 @cindex algorithms
1166
1167 The crypto backends support a variety of algorithms used in public key
1168 cryptography.@footnote{Some engines also provide symmetric only
1169 encryption; see the description of the encryption function on how to use
1170 this.}  The following sections list the identifiers used to denote such
1171 an algorithm.
1172
1173 @menu
1174 * Public Key Algorithms::         A list of all public key algorithms.
1175 * Hash Algorithms::               A list of all hash algorithms.
1176 @end menu
1177
1178
1179 @node Public Key Algorithms
1180 @section Public Key Algorithms
1181 @cindex algorithms, public key
1182 @cindex public key algorithms
1183
1184 Public key algorithms are used for encryption, decryption, signing and
1185 verification of signatures.
1186
1187 @deftp {Data type} {enum gpgme_pubkey_algo_t}
1188 @tindex gpgme_pubkey_algo_t
1189 The @code{gpgme_pubkey_algo_t} type specifies the set of all public key
1190 algorithms that are supported by @acronym{GPGME}.  Possible values
1191 are:
1192
1193 @table @code
1194 @item GPGME_PK_RSA
1195 This value indicates the RSA (Rivest, Shamir, Adleman) algorithm.
1196
1197 @item GPGME_PK_RSA_E
1198 Deprecated.  This value indicates the RSA (Rivest, Shamir, Adleman)
1199 algorithm for encryption and decryption only.
1200
1201 @item GPGME_PK_RSA_S
1202 Deprecated.  This value indicates the RSA (Rivest, Shamir, Adleman)
1203 algorithm for signing and verification only.
1204
1205 @item GPGME_PK_DSA
1206 This value indicates DSA, the Digital Signature Algorithm.
1207
1208 @item GPGME_PK_ELG
1209 This value indicates ElGamal.
1210
1211 @item GPGME_PK_ELG_E
1212 This value also indicates ElGamal and is used specifically in GnuPG.
1213
1214 @item GPGME_PK_ECC
1215 This value is a generic indicator for ellipic curve algorithms.
1216
1217 @item GPGME_PK_ECDSA
1218 This value indicates ECDSA, the Elliptic Curve Digital Signature
1219 Algorithm as defined by FIPS 186-2 and RFC-6637.
1220
1221 @item GPGME_PK_ECDH
1222 This value indicates ECDH, the Eliptic Curve Diffie-Hellmann
1223 encryption algorithm as defined by RFC-6637.
1224
1225 @item GPGME_PK_EDDSA
1226 This value indicates the EdDSA algorithm.
1227
1228 @end table
1229 @end deftp
1230
1231 @deftypefun {const char *} gpgme_pubkey_algo_name (@w{gpgme_pubkey_algo_t @var{algo}})
1232 The function @code{gpgme_pubkey_algo_name} returns a pointer to a
1233 statically allocated string containing a description of the public key
1234 algorithm @var{algo}.  This string can be used to output the name of
1235 the public key algorithm to the user.
1236
1237 If @var{algo} is not a valid public key algorithm, @code{NULL} is
1238 returned.
1239 @end deftypefun
1240
1241 @deftypefun {char *} gpgme_pubkey_algo_string (@w{gpgme_subkey_t @var{key}})
1242 The function @code{gpgme_pubkey_algo_string} is a convenience function
1243 to build and return an algorithm string in the same way GnuPG does
1244 (e.g. ``rsa2048'' or ``ed25519'').  The caller must free the result
1245 using @code{gpgme_free}.  On error (e.g. invalid argument or memory
1246 exhausted), the function returns NULL and sets @code{ERRNO}.
1247 @end deftypefun
1248
1249
1250 @node Hash Algorithms
1251 @section Hash Algorithms
1252 @cindex algorithms, hash
1253 @cindex algorithms, message digest
1254 @cindex hash algorithms
1255 @cindex message digest algorithms
1256
1257 Hash (message digest) algorithms are used to compress a long message
1258 to make it suitable for public key cryptography.
1259
1260 @deftp {Data type} {enum gpgme_hash_algo_t}
1261 @tindex gpgme_hash_algo_t
1262 The @code{gpgme_hash_algo_t} type specifies the set of all hash algorithms
1263 that are supported by @acronym{GPGME}.  Possible values are:
1264
1265 @table @code
1266 @item GPGME_MD_MD5
1267 @item GPGME_MD_SHA1
1268 @item GPGME_MD_RMD160
1269 @item GPGME_MD_MD2
1270 @item GPGME_MD_TIGER
1271 @item GPGME_MD_HAVAL
1272 @item GPGME_MD_SHA256
1273 @item GPGME_MD_SHA384
1274 @item GPGME_MD_SHA512
1275 @item GPGME_MD_SHA224
1276 @item GPGME_MD_MD4
1277 @item GPGME_MD_CRC32
1278 @item GPGME_MD_CRC32_RFC1510
1279 @item GPGME_MD_CRC24_RFC2440
1280 @end table
1281 @end deftp
1282
1283 @deftypefun {const char *} gpgme_hash_algo_name (@w{gpgme_hash_algo_t @var{algo}})
1284 The function @code{gpgme_hash_algo_name} returns a pointer to a
1285 statically allocated string containing a description of the hash
1286 algorithm @var{algo}.  This string can be used to output the name of
1287 the hash algorithm to the user.
1288
1289 If @var{algo} is not a valid hash algorithm, @code{NULL} is returned.
1290 @end deftypefun
1291
1292
1293 @node Error Handling
1294 @chapter Error Handling
1295 @cindex error handling
1296
1297 Many functions in @acronym{GPGME} can return an error if they fail.
1298 For this reason, the application should always catch the error
1299 condition and take appropriate measures, for example by releasing the
1300 resources and passing the error up to the caller, or by displaying a
1301 descriptive message to the user and cancelling the operation.
1302
1303 Some error values do not indicate a system error or an error in the
1304 operation, but the result of an operation that failed properly.  For
1305 example, if you try to decrypt a tempered message, the decryption will
1306 fail.  Another error value actually means that the end of a data
1307 buffer or list has been reached.  The following descriptions explain
1308 for many error codes what they mean usually.  Some error values have
1309 specific meanings if returned by a certain functions.  Such cases are
1310 described in the documentation of those functions.
1311
1312 @acronym{GPGME} uses the @code{libgpg-error} library.  This allows to
1313 share the error codes with other components of the GnuPG system, and
1314 thus pass error values transparently from the crypto engine, or some
1315 helper application of the crypto engine, to the user.  This way no
1316 information is lost.  As a consequence, @acronym{GPGME} does not use
1317 its own identifiers for error codes, but uses those provided by
1318 @code{libgpg-error}.  They usually start with @code{GPG_ERR_}.
1319
1320 However, @acronym{GPGME} does provide aliases for the functions
1321 defined in libgpg-error, which might be preferred for name space
1322 consistency.
1323
1324 @menu
1325 * Error Values::                  The error value and what it means.
1326 * Error Sources::                 A list of important error sources.
1327 * Error Codes::                   A list of important error codes.
1328 * Error Strings::                 How to get a descriptive string from a value.
1329 @end menu
1330
1331
1332 @node Error Values
1333 @section Error Values
1334 @cindex error values
1335 @cindex error codes
1336 @cindex error sources
1337
1338 @deftp {Data type} {gpgme_err_code_t}
1339 The @code{gpgme_err_code_t} type is an alias for the @code{libgpg-error}
1340 type @code{gpg_err_code_t}.  The error code indicates the type of an
1341 error, or the reason why an operation failed.
1342
1343 A list of important error codes can be found in the next section.
1344 @end deftp
1345
1346 @deftp {Data type} {gpgme_err_source_t}
1347 The @code{gpgme_err_source_t} type is an alias for the
1348 @code{libgpg-error} type @code{gpg_err_source_t}.  The error source
1349 has not a precisely defined meaning.  Sometimes it is the place where
1350 the error happened, sometimes it is the place where an error was
1351 encoded into an error value.  Usually the error source will give an
1352 indication to where to look for the problem.  This is not always true,
1353 but it is attempted to achieve this goal.
1354
1355 A list of important error sources can be found in the next section.
1356 @end deftp
1357
1358 @deftp {Data type} {gpgme_error_t}
1359 The @code{gpgme_error_t} type is an alias for the @code{libgpg-error}
1360 type @code{gpg_error_t}.  An error value like this has always two
1361 components, an error code and an error source.  Both together form the
1362 error value.
1363
1364 Thus, the error value can not be directly compared against an error
1365 code, but the accessor functions described below must be used.
1366 However, it is guaranteed that only 0 is used to indicate success
1367 (@code{GPG_ERR_NO_ERROR}), and that in this case all other parts of
1368 the error value are set to 0, too.
1369
1370 Note that in @acronym{GPGME}, the error source is used purely for
1371 diagnostical purposes.  Only the error code should be checked to test
1372 for a certain outcome of a function.  The manual only documents the
1373 error code part of an error value.  The error source is left
1374 unspecified and might be anything.
1375 @end deftp
1376
1377 @deftypefun {static inline gpgme_err_code_t} gpgme_err_code (@w{gpgme_error_t @var{err}})
1378 The static inline function @code{gpgme_err_code} returns the
1379 @code{gpgme_err_code_t} component of the error value @var{err}.  This
1380 function must be used to extract the error code from an error value in
1381 order to compare it with the @code{GPG_ERR_*} error code macros.
1382 @end deftypefun
1383
1384 @deftypefun {static inline gpgme_err_source_t} gpgme_err_source (@w{gpgme_error_t @var{err}})
1385 The static inline function @code{gpgme_err_source} returns the
1386 @code{gpgme_err_source_t} component of the error value @var{err}.  This
1387 function must be used to extract the error source from an error value in
1388 order to compare it with the @code{GPG_ERR_SOURCE_*} error source macros.
1389 @end deftypefun
1390
1391 @deftypefun {static inline gpgme_error_t} gpgme_err_make (@w{gpgme_err_source_t @var{source}}, @w{gpgme_err_code_t @var{code}})
1392 The static inline function @code{gpgme_err_make} returns the error
1393 value consisting of the error source @var{source} and the error code
1394 @var{code}.
1395
1396 This function can be used in callback functions to construct an error
1397 value to return it to the library.
1398 @end deftypefun
1399
1400 @deftypefun {static inline gpgme_error_t} gpgme_error (@w{gpgme_err_code_t @var{code}})
1401 The static inline function @code{gpgme_error} returns the error value
1402 consisting of the default error source and the error code @var{code}.
1403
1404 For @acronym{GPGME} applications, the default error source is
1405 @code{GPG_ERR_SOURCE_USER_1}.  You can define
1406 @code{GPGME_ERR_SOURCE_DEFAULT} before including @file{gpgme.h} to
1407 change this default.
1408
1409 This function can be used in callback functions to construct an error
1410 value to return it to the library.
1411 @end deftypefun
1412
1413 The @code{libgpg-error} library provides error codes for all system
1414 error numbers it knows about.  If @var{err} is an unknown error
1415 number, the error code @code{GPG_ERR_UNKNOWN_ERRNO} is used.  The
1416 following functions can be used to construct error values from system
1417 errnor numbers.
1418
1419 @deftypefun {gpgme_error_t} gpgme_err_make_from_errno (@w{gpgme_err_source_t @var{source}}, @w{int @var{err}})
1420 The function @code{gpgme_err_make_from_errno} is like
1421 @code{gpgme_err_make}, but it takes a system error like @code{errno}
1422 instead of a @code{gpgme_err_code_t} error code.
1423 @end deftypefun
1424
1425 @deftypefun {gpgme_error_t} gpgme_error_from_errno (@w{int @var{err}})
1426 The function @code{gpgme_error_from_errno} is like @code{gpgme_error},
1427 but it takes a system error like @code{errno} instead of a
1428 @code{gpgme_err_code_t} error code.
1429 @end deftypefun
1430
1431 Sometimes you might want to map system error numbers to error codes
1432 directly, or map an error code representing a system error back to the
1433 system error number.  The following functions can be used to do that.
1434
1435 @deftypefun {gpgme_err_code_t} gpgme_err_code_from_errno (@w{int @var{err}})
1436 The function @code{gpgme_err_code_from_errno} returns the error code
1437 for the system error @var{err}.  If @var{err} is not a known system
1438 error, the function returns @code{GPG_ERR_UNKNOWN_ERRNO}.
1439 @end deftypefun
1440
1441 @deftypefun {int} gpgme_err_code_to_errno (@w{gpgme_err_code_t @var{err}})
1442 The function @code{gpgme_err_code_to_errno} returns the system error
1443 for the error code @var{err}.  If @var{err} is not an error code
1444 representing a system error, or if this system error is not defined on
1445 this system, the function returns @code{0}.
1446 @end deftypefun
1447
1448
1449 @node Error Sources
1450 @section Error Sources
1451 @cindex error codes, list of
1452
1453 The library @code{libgpg-error} defines an error source for every
1454 component of the GnuPG system.  The error source part of an error
1455 value is not well defined.  As such it is mainly useful to improve the
1456 diagnostic error message for the user.
1457
1458 If the error code part of an error value is @code{0}, the whole error
1459 value will be @code{0}.  In this case the error source part is of
1460 course @code{GPG_ERR_SOURCE_UNKNOWN}.
1461
1462 The list of error sources that might occur in applications using
1463 @acronym{GPGME} is:
1464
1465 @table @code
1466 @item GPG_ERR_SOURCE_UNKNOWN
1467 The error source is not known.  The value of this error source is
1468 @code{0}.
1469
1470 @item GPG_ERR_SOURCE_GPGME
1471 The error source is @acronym{GPGME} itself.  This is the default for
1472 errors that occur in the @acronym{GPGME} library.
1473
1474 @item GPG_ERR_SOURCE_GPG
1475 The error source is GnuPG, which is the crypto engine used for the
1476 OpenPGP protocol.
1477
1478 @item GPG_ERR_SOURCE_GPGSM
1479 The error source is GPGSM, which is the crypto engine used for the
1480 CMS protocol.
1481
1482 @item GPG_ERR_SOURCE_GCRYPT
1483 The error source is @code{libgcrypt}, which is used by crypto engines
1484 to perform cryptographic operations.
1485
1486 @item GPG_ERR_SOURCE_GPGAGENT
1487 The error source is @command{gpg-agent}, which is used by crypto
1488 engines to perform operations with the secret key.
1489
1490 @item GPG_ERR_SOURCE_PINENTRY
1491 The error source is @command{pinentry}, which is used by
1492 @command{gpg-agent} to query the passphrase to unlock a secret key.
1493
1494 @item GPG_ERR_SOURCE_SCD
1495 The error source is the SmartCard Daemon, which is used by
1496 @command{gpg-agent} to delegate operations with the secret key to a
1497 SmartCard.
1498
1499 @item GPG_ERR_SOURCE_KEYBOX
1500 The error source is @code{libkbx}, a library used by the crypto
1501 engines to manage local keyrings.
1502
1503 @item GPG_ERR_SOURCE_USER_1
1504 @item GPG_ERR_SOURCE_USER_2
1505 @item GPG_ERR_SOURCE_USER_3
1506 @item GPG_ERR_SOURCE_USER_4
1507 These error sources are not used by any GnuPG component and can be
1508 used by other software.  For example, applications using
1509 @acronym{GPGME} can use them to mark error values coming from callback
1510 handlers.  Thus @code{GPG_ERR_SOURCE_USER_1} is the default for errors
1511 created with @code{gpgme_error} and @code{gpgme_error_from_errno},
1512 unless you define @code{GPGME_ERR_SOURCE_DEFAULT} before including
1513 @file{gpgme.h}.
1514 @end table
1515
1516
1517 @node Error Codes
1518 @section Error Codes
1519 @cindex error codes, list of
1520
1521 The library @code{libgpg-error} defines many error values.  Most of
1522 them are not used by @code{GPGME} directly, but might be returned by
1523 @acronym{GPGME} because it received them from the crypto engine.  The
1524 below list only includes such error codes that have a specific meaning
1525 in @code{GPGME}, or which are so common that you should know about
1526 them.
1527
1528 @table @code
1529 @item GPG_ERR_EOF
1530 This value indicates the end of a list, buffer or file.
1531
1532 @item GPG_ERR_NO_ERROR
1533 This value indicates success.  The value of this error code is
1534 @code{0}.  Also, it is guaranteed that an error value made from the
1535 error code @code{0} will be @code{0} itself (as a whole).  This means
1536 that the error source information is lost for this error code,
1537 however, as this error code indicates that no error occured, this is
1538 generally not a problem.
1539
1540 @item GPG_ERR_GENERAL
1541 This value means that something went wrong, but either there is not
1542 enough information about the problem to return a more useful error
1543 value, or there is no separate error value for this type of problem.
1544
1545 @item GPG_ERR_ENOMEM
1546 This value means that an out-of-memory condition occurred.
1547
1548 @item GPG_ERR_E...
1549 System errors are mapped to GPG_ERR_FOO where FOO is the symbol for
1550 the system error.
1551
1552 @item GPG_ERR_INV_VALUE
1553 This value means that some user provided data was out of range.  This
1554 can also refer to objects.  For example, if an empty
1555 @code{gpgme_data_t} object was expected, but one containing data was
1556 provided, this error value is returned.
1557
1558 @item GPG_ERR_UNUSABLE_PUBKEY
1559 This value means that some recipients for a message were invalid.
1560
1561 @item GPG_ERR_UNUSABLE_SECKEY
1562 This value means that some signers were invalid.
1563
1564 @item GPG_ERR_NO_DATA
1565 This value means that a @code{gpgme_data_t} object which was expected
1566 to have content was found empty.
1567
1568 @item GPG_ERR_CONFLICT
1569 This value means that a conflict of some sort occurred.
1570
1571 @item GPG_ERR_NOT_IMPLEMENTED
1572 This value indicates that the specific function (or operation) is not
1573 implemented.  This error should never happen.  It can only occur if
1574 you use certain values or configuration options which do not work,
1575 but for which we think that they should work at some later time.
1576
1577 @item GPG_ERR_DECRYPT_FAILED
1578 This value indicates that a decryption operation was unsuccessful.
1579
1580 @item GPG_ERR_BAD_PASSPHRASE
1581 This value means that the user did not provide a correct passphrase
1582 when requested.
1583
1584 @item GPG_ERR_CANCELED
1585 This value means that the operation was canceled.
1586
1587 @item GPG_ERR_INV_ENGINE
1588 This value means that the engine that implements the desired protocol
1589 is currently not available.  This can either be because the sources
1590 were configured to exclude support for this engine, or because the
1591 engine is not installed properly.
1592
1593 @item GPG_ERR_AMBIGUOUS_NAME
1594 This value indicates that a user ID or other specifier did not specify
1595 a unique key.
1596
1597 @item GPG_ERR_WRONG_KEY_USAGE
1598 This value indicates that a key is not used appropriately.
1599
1600 @item GPG_ERR_CERT_REVOKED
1601 This value indicates that a key signature was revoced.
1602
1603 @item GPG_ERR_CERT_EXPIRED
1604 This value indicates that a key signature expired.
1605
1606 @item GPG_ERR_NO_CRL_KNOWN
1607 This value indicates that no certificate revocation list is known for
1608 the certificate.
1609
1610 @item GPG_ERR_NO_POLICY_MATCH
1611 This value indicates that a policy issue occured.
1612
1613 @item GPG_ERR_NO_SECKEY
1614 This value indicates that no secret key for the user ID is available.
1615
1616 @item GPG_ERR_MISSING_CERT
1617 This value indicates that a key could not be imported because the
1618 issuer certificate is missing.
1619
1620 @item GPG_ERR_BAD_CERT_CHAIN
1621 This value indicates that a key could not be imported because its
1622 certificate chain is not good, for example it could be too long.
1623
1624 @item GPG_ERR_UNSUPPORTED_ALGORITHM
1625 This value means a verification failed because the cryptographic
1626 algorithm is not supported by the crypto backend.
1627
1628 @item GPG_ERR_BAD_SIGNATURE
1629 This value means a verification failed because the signature is bad.
1630
1631 @item GPG_ERR_NO_PUBKEY
1632 This value means a verification failed because the public key is not
1633 available.
1634
1635 @item GPG_ERR_USER_1
1636 @item GPG_ERR_USER_2
1637 @item ...
1638 @item GPG_ERR_USER_16
1639 These error codes are not used by any GnuPG component and can be
1640 freely used by other software.  Applications using @acronym{GPGME}
1641 might use them to mark specific errors returned by callback handlers
1642 if no suitable error codes (including the system errors) for
1643 these errors exist already.
1644 @end table
1645
1646
1647 @node Error Strings
1648 @section Error Strings
1649 @cindex error values, printing of
1650 @cindex error codes, printing of
1651 @cindex error sources, printing of
1652 @cindex error strings
1653
1654 @deftypefun {const char *} gpgme_strerror (@w{gpgme_error_t @var{err}})
1655 The function @code{gpgme_strerror} returns a pointer to a statically
1656 allocated string containing a description of the error code contained
1657 in the error value @var{err}.  This string can be used to output a
1658 diagnostic message to the user.
1659
1660 This function is not thread safe.  Use @code{gpgme_strerror_r} in
1661 multi-threaded programs.
1662 @end deftypefun
1663
1664
1665 @deftypefun {int} gpgme_strerror_r (@w{gpgme_error_t @var{err}}, @w{char *@var{buf}}, @w{size_t @var{buflen}})
1666 The function @code{gpgme_strerror_r} returns the error string for
1667 @var{err} in the user-supplied buffer @var{buf} of size @var{buflen}.
1668 This function is, in contrast to @code{gpgme_strerror}, thread-safe if
1669 a thread-safe @code{strerror_r} function is provided by the system.
1670 If the function succeeds, 0 is returned and @var{buf} contains the
1671 string describing the error.  If the buffer was not large enough,
1672 ERANGE is returned and @var{buf} contains as much of the beginning of
1673 the error string as fits into the buffer.
1674 @end deftypefun
1675
1676
1677 @deftypefun {const char *} gpgme_strsource (@w{gpgme_error_t @var{err}})
1678 The function @code{gpgme_strerror} returns a pointer to a statically
1679 allocated string containing a description of the error source
1680 contained in the error value @var{err}.  This string can be used to
1681 output a diagnostic message to the user.
1682 @end deftypefun
1683
1684 The following example illustrates the use of @code{gpgme_strerror}:
1685
1686 @example
1687 gpgme_ctx_t ctx;
1688 gpgme_error_t err = gpgme_new (&ctx);
1689 if (err)
1690   @{
1691     fprintf (stderr, "%s: creating GpgME context failed: %s: %s\n",
1692              argv[0], gpgme_strsource (err), gpgme_strerror (err));
1693     exit (1);
1694   @}
1695 @end example
1696
1697
1698 @node Exchanging Data
1699 @chapter Exchanging Data
1700 @cindex data, exchanging
1701
1702 A lot of data has to be exchanged between the user and the crypto
1703 engine, like plaintext messages, ciphertext, signatures and
1704 information about the keys.  The technical details about exchanging
1705 the data information are completely abstracted by @acronym{GPGME}.
1706 The user provides and receives the data via @code{gpgme_data_t} objects,
1707 regardless of the communication protocol between @acronym{GPGME} and
1708 the crypto engine in use.
1709
1710 @deftp {Data type} {gpgme_data_t}
1711 The @code{gpgme_data_t} type is a handle for a container for generic
1712 data, which is used by @acronym{GPGME} to exchange data with the user.
1713 @end deftp
1714
1715 @code{gpgme_data_t} objects do not provide notifications on events.
1716 It is assumed that read and write operations are blocking until data
1717 is available.  If this is undesirable, the application must ensure
1718 that all GPGME data operations always have data available, for example
1719 by using memory buffers or files rather than pipes or sockets.  This
1720 might be relevant, for example, if the external event loop mechanism
1721 is used.
1722
1723 @deftp {Data type} {gpgme_off_t}
1724 On POSIX platforms the @code{gpgme_off_t} type is an alias for
1725 @code{off_t}; it may be used interchangeable.  On Windows platforms
1726 @code{gpgme_off_t} is defined as a long (i.e. 32 bit) for 32 bit
1727 Windows and as a 64 bit signed integer for 64 bit Windows.
1728 @end deftp
1729
1730 @deftp {Data type} {gpgme_ssize_t}
1731 The @code{gpgme_ssize_t} type is an alias for @code{ssize_t}.  It has
1732 only been introduced to overcome portability problems pertaining to
1733 the declaration of @code{ssize_t} by different toolchains.
1734 @end deftp
1735
1736
1737 @menu
1738 * Creating Data Buffers::         Creating new data buffers.
1739 * Destroying Data Buffers::       Releasing data buffers.
1740 * Manipulating Data Buffers::     Operations on data buffers.
1741 @end menu
1742
1743
1744 @node Creating Data Buffers
1745 @section Creating Data Buffers
1746 @cindex data buffer, creation
1747
1748 Data objects can be based on memory, files, or callback functions
1749 provided by the user.  Not all operations are supported by all
1750 objects.
1751
1752
1753 @menu
1754 * Memory Based Data Buffers::     Creating memory based data buffers.
1755 * File Based Data Buffers::       Creating file based data buffers.
1756 * Callback Based Data Buffers::   Creating callback based data buffers.
1757 @end menu
1758
1759
1760 @node Memory Based Data Buffers
1761 @subsection Memory Based Data Buffers
1762
1763 Memory based data objects store all data in allocated memory.  This is
1764 convenient, but only practical for an amount of data that is a
1765 fraction of the available physical memory.  The data has to be copied
1766 from its source and to its destination, which can often be avoided by
1767 using one of the other data object
1768
1769 @deftypefun gpgme_error_t gpgme_data_new (@w{gpgme_data_t *@var{dh}})
1770 The function @code{gpgme_data_new} creates a new @code{gpgme_data_t}
1771 object and returns a handle for it in @var{dh}.  The data object is
1772 memory based and initially empty.
1773
1774 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
1775 data object was successfully created, @code{GPG_ERR_INV_VALUE} if
1776 @var{dh} is not a valid pointer, and @code{GPG_ERR_ENOMEM} if not
1777 enough memory is available.
1778 @end deftypefun
1779
1780 @deftypefun gpgme_error_t gpgme_data_new_from_mem (@w{gpgme_data_t *@var{dh}}, @w{const char *@var{buffer}}, @w{size_t @var{size}}, @w{int @var{copy}})
1781 The function @code{gpgme_data_new_from_mem} creates a new
1782 @code{gpgme_data_t} object and fills it with @var{size} bytes starting
1783 from @var{buffer}.
1784
1785 If @var{copy} is not zero, a private copy of the data is made.  If
1786 @var{copy} is zero, the data is taken from the specified buffer as
1787 needed, and the user has to ensure that the buffer remains valid for
1788 the whole life span of the data object.
1789
1790 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
1791 data object was successfully created, @code{GPG_ERR_INV_VALUE} if
1792 @var{dh} or @var{buffer} is not a valid pointer, and
1793 @code{GPG_ERR_ENOMEM} if not enough memory is available.
1794 @end deftypefun
1795
1796 @deftypefun gpgme_error_t gpgme_data_new_from_file (@w{gpgme_data_t *@var{dh}}, @w{const char *@var{filename}}, @w{int @var{copy}})
1797 The function @code{gpgme_data_new_from_file} creates a new
1798 @code{gpgme_data_t} object and fills it with the content of the file
1799 @var{filename}.
1800
1801 If @var{copy} is not zero, the whole file is read in at initialization
1802 time and the file is not used anymore after that.  This is the only
1803 mode supported currently.  Later, a value of zero for @var{copy} might
1804 cause all reads to be delayed until the data is needed, but this is
1805 not yet implemented.
1806
1807 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
1808 data object was successfully created, @code{GPG_ERR_INV_VALUE} if
1809 @var{dh} or @var{filename} is not a valid pointer,
1810 @code{GPG_ERR_NOT_IMPLEMENTED} if @var{code} is zero, and
1811 @code{GPG_ERR_ENOMEM} if not enough memory is available.
1812 @end deftypefun
1813
1814 @deftypefun gpgme_error_t gpgme_data_new_from_filepart (@w{gpgme_data_t *@var{dh}}, @w{const char *@var{filename}}, @w{FILE *@var{fp}}, @w{off_t @var{offset}}, @w{size_t @var{length}})
1815 The function @code{gpgme_data_new_from_filepart} creates a new
1816 @code{gpgme_data_t} object and fills it with a part of the file specified
1817 by @var{filename} or @var{fp}.
1818
1819 Exactly one of @var{filename} and @var{fp} must be non-zero, the other
1820 must be zero.  The argument that is not zero specifies the file from
1821 which @var{length} bytes are read into the data object, starting from
1822 @var{offset}.
1823
1824 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
1825 data object was successfully created, @code{GPG_ERR_INV_VALUE} if
1826 @var{dh} and exactly one of @var{filename} and @var{fp} is not a valid
1827 pointer, and @code{GPG_ERR_ENOMEM} if not enough memory is available.
1828 @end deftypefun
1829
1830
1831 @node File Based Data Buffers
1832 @subsection File Based Data Buffers
1833
1834 File based data objects operate directly on file descriptors or
1835 streams.  Only a small amount of data is stored in core at any time,
1836 so the size of the data objects is not limited by @acronym{GPGME}.
1837
1838 @deftypefun gpgme_error_t gpgme_data_new_from_fd (@w{gpgme_data_t *@var{dh}}, @w{int @var{fd}})
1839 The function @code{gpgme_data_new_from_fd} creates a new
1840 @code{gpgme_data_t} object and uses the file descriptor @var{fd} to read
1841 from (if used as an input data object) and write to (if used as an
1842 output data object).
1843
1844 When using the data object as an input buffer, the function might read
1845 a bit more from the file descriptor than is actually needed by the
1846 crypto engine in the desired operation because of internal buffering.
1847
1848 Note that GPGME assumes that the file descriptor is set to blocking
1849 mode.  Errors during I/O operations, except for EINTR, are usually
1850 fatal for crypto operations.
1851
1852 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
1853 data object was successfully created, and @code{GPG_ERR_ENOMEM} if not
1854 enough memory is available.
1855 @end deftypefun
1856
1857 @deftypefun gpgme_error_t gpgme_data_new_from_stream (@w{gpgme_data_t *@var{dh}}, @w{FILE *@var{stream}})
1858 The function @code{gpgme_data_new_from_stream} creates a new
1859 @code{gpgme_data_t} object and uses the I/O stream @var{stream} to read
1860 from (if used as an input data object) and write to (if used as an
1861 output data object).
1862
1863 When using the data object as an input buffer, the function might read
1864 a bit more from the stream than is actually needed by the crypto
1865 engine in the desired operation because of internal buffering.
1866
1867 Note that GPGME assumes that the stream is in blocking mode.  Errors
1868 during I/O operations, except for EINTR, are usually fatal for crypto
1869 operations.
1870
1871 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
1872 data object was successfully created, and @code{GPG_ERR_ENOMEM} if not
1873 enough memory is available.
1874 @end deftypefun
1875
1876
1877 @node Callback Based Data Buffers
1878 @subsection Callback Based Data Buffers
1879
1880 If neither memory nor file based data objects are a good fit for your
1881 application, you can implement the functions a data object provides
1882 yourself and create a data object from these callback functions.
1883
1884 @deftp {Data type} {ssize_t (*gpgme_data_read_cb_t) (@w{void *@var{handle}}, @w{void @var{*buffer}}, @w{size_t @var{size}})}
1885 @tindex gpgme_data_read_cb_t
1886 The @code{gpgme_data_read_cb_t} type is the type of functions which
1887 @acronym{GPGME} calls if it wants to read data from a user-implemented
1888 data object.  The function should read up to @var{size} bytes from the
1889 current read position into the space starting at @var{buffer}.  The
1890 @var{handle} is provided by the user at data object creation time.
1891
1892 Note that GPGME assumes that the read blocks until data is available.
1893 Errors during I/O operations, except for EINTR, are usually fatal for
1894 crypto operations.
1895
1896 The function should return the number of bytes read, 0 on EOF, and -1
1897 on error.  If an error occurs, @var{errno} should be set to describe
1898 the type of the error.
1899 @end deftp
1900
1901 @deftp {Data type} {ssize_t (*gpgme_data_write_cb_t) (@w{void *@var{handle}}, @w{const void @var{*buffer}}, @w{size_t @var{size}})}
1902 @tindex gpgme_data_write_cb_t
1903 The @code{gpgme_data_write_cb_t} type is the type of functions which
1904 @acronym{GPGME} calls if it wants to write data to a user-implemented
1905 data object.  The function should write up to @var{size} bytes to the
1906 current write position from the space starting at @var{buffer}.  The
1907 @var{handle} is provided by the user at data object creation time.
1908
1909 Note that GPGME assumes that the write blocks until data is available.
1910 Errors during I/O operations, except for EINTR, are usually fatal for
1911 crypto operations.
1912
1913 The function should return the number of bytes written, and -1 on
1914 error.  If an error occurs, @var{errno} should be set to describe the
1915 type of the error.
1916 @end deftp
1917
1918 @deftp {Data type} {off_t (*gpgme_data_seek_cb_t) (@w{void *@var{handle}}, @w{off_t @var{offset}}, @w{int @var{whence}})}
1919 @tindex gpgme_data_seek_cb_t
1920 The @code{gpgme_data_seek_cb_t} type is the type of functions which
1921 @acronym{GPGME} calls if it wants to change the current read/write
1922 position in a user-implemented data object, just like the @code{lseek}
1923 function.
1924
1925 The function should return the new read/write position, and -1 on
1926 error.  If an error occurs, @var{errno} should be set to describe the
1927 type of the error.
1928 @end deftp
1929
1930 @deftp {Data type} {void (*gpgme_data_release_cb_t) (@w{void *@var{handle}})}
1931 @tindex gpgme_data_release_cb_t
1932 The @code{gpgme_data_release_cb_t} type is the type of functions which
1933 @acronym{GPGME} calls if it wants to destroy a user-implemented data
1934 object.  The @var{handle} is provided by the user at data object
1935 creation time.
1936 @end deftp
1937
1938 @deftp {Data type} {struct gpgme_data_cbs}
1939 This structure is used to store the data callback interface functions
1940 described above.  It has the following members:
1941
1942 @table @code
1943 @item gpgme_data_read_cb_t read
1944 This is the function called by @acronym{GPGME} to read data from the
1945 data object.  It is only required for input data object.
1946
1947 @item gpgme_data_write_cb_t write
1948 This is the function called by @acronym{GPGME} to write data to the
1949 data object.  It is only required for output data object.
1950
1951 @item gpgme_data_seek_cb_t seek
1952 This is the function called by @acronym{GPGME} to change the current
1953 read/write pointer in the data object (if available).  It is optional.
1954
1955 @item gpgme_data_release_cb_t release
1956 This is the function called by @acronym{GPGME} to release a data
1957 object.  It is optional.
1958 @end table
1959 @end deftp
1960
1961 @deftypefun gpgme_error_t gpgme_data_new_from_cbs (@w{gpgme_data_t *@var{dh}}, @w{gpgme_data_cbs_t @var{cbs}}, @w{void *@var{handle}})
1962 The function @code{gpgme_data_new_from_cbs} creates a new
1963 @code{gpgme_data_t} object and uses the user-provided callback functions
1964 to operate on the data object.
1965
1966 The handle @var{handle} is passed as first argument to the callback
1967 functions.  This can be used to identify this data object.
1968
1969 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
1970 data object was successfully created, and @code{GPG_ERR_ENOMEM} if not
1971 enough memory is available.
1972 @end deftypefun
1973
1974
1975 @node Destroying Data Buffers
1976 @section Destroying Data Buffers
1977 @cindex data buffer, destruction
1978
1979 @deftypefun void gpgme_data_release (@w{gpgme_data_t @var{dh}})
1980 The function @code{gpgme_data_release} destroys the data object with
1981 the handle @var{dh}.  It releases all associated resources that were
1982 not provided by the user in the first place.
1983 @end deftypefun
1984
1985 @deftypefun {char *} gpgme_data_release_and_get_mem (@w{gpgme_data_t @var{dh}}, @w{size_t *@var{length}})
1986 The function @code{gpgme_data_release_and_get_mem} is like
1987 @code{gpgme_data_release}, except that it returns the data buffer and
1988 its length that was provided by the object.
1989
1990 The user has to release the buffer with @code{gpgme_free}.  In case
1991 the user provided the data buffer in non-copy mode, a copy will be
1992 made for this purpose.
1993
1994 In case an error returns, or there is no suitable data buffer that can
1995 be returned to the user, the function will return @code{NULL}.  In any
1996 case, the data object @var{dh} is destroyed.
1997 @end deftypefun
1998
1999
2000 @deftypefun void gpgme_free (@w{void *@var{buffer}})
2001 The function @code{gpgme_free} releases the memory returned by
2002 @code{gpgme_data_release_and_get_mem} and
2003 @code{gpgme_pubkey_algo_string}.  It should be used instead of the
2004 system libraries @code{free} function in case different allocators are
2005 used by a program.  This is often the case if gpgme is used under
2006 Windows as a DLL.
2007 @end deftypefun
2008
2009
2010 @node Manipulating Data Buffers
2011 @section Manipulating Data Buffers
2012 @cindex data buffer, manipulation
2013
2014 Data buffers contain data and meta-data.  The following operations can
2015 be used to manipulate both.
2016
2017
2018 @menu
2019 * Data Buffer I/O Operations::    I/O operations on data buffers.
2020 * Data Buffer Meta-Data::         Meta-data manipulation of data buffers.
2021 * Data Buffer Convenience::       Convenience function for data buffers.
2022 @end menu
2023
2024
2025 @node Data Buffer I/O Operations
2026 @subsection Data Buffer I/O Operations
2027 @cindex data buffer, I/O operations
2028 @cindex data buffer, read
2029 @cindex data buffer, write
2030 @cindex data buffer, seek
2031
2032 @deftypefun ssize_t gpgme_data_read (@w{gpgme_data_t @var{dh}}, @w{void *@var{buffer}}, @w{size_t @var{length}})
2033 The function @code{gpgme_data_read} reads up to @var{length} bytes
2034 from the data object with the handle @var{dh} into the space starting
2035 at @var{buffer}.
2036
2037 If no error occurs, the actual amount read is returned.  If the end of
2038 the data object is reached, the function returns 0.
2039
2040 In all other cases, the function returns -1 and sets @var{errno}.
2041 @end deftypefun
2042
2043 @deftypefun ssize_t gpgme_data_write (@w{gpgme_data_t @var{dh}}, @w{const void *@var{buffer}}, @w{size_t @var{size}})
2044 The function @code{gpgme_data_write} writes up to @var{size} bytes
2045 starting from @var{buffer} into the data object with the handle
2046 @var{dh} at the current write position.
2047
2048 The function returns the number of bytes actually written, or -1 if an
2049 error occurs.  If an error occurs, @var{errno} is set.
2050 @end deftypefun
2051
2052 @deftypefun off_t gpgme_data_seek (@w{gpgme_data_t @var{dh}}, @w{off_t @var{offset}}, @w{int @var{whence}})
2053 The function @code{gpgme_data_seek} changes the current read/write
2054 position.
2055
2056 The @var{whence} argument specifies how the @var{offset} should be
2057 interpreted.  It must be one of the following symbolic constants:
2058
2059 @table @code
2060 @item SEEK_SET
2061 Specifies that @var{offset} is a count of characters from the
2062 beginning of the data object.
2063
2064 @item SEEK_CUR
2065 Specifies that @var{offset} is a count of characters from the current
2066 file position.  This count may be positive or negative.
2067
2068 @item SEEK_END
2069 Specifies that @var{offset} is a count of characters from the end of
2070 the data object.  A negative count specifies a position within the
2071 current extent of the data object; a positive count specifies a
2072 position past the current end.  If you set the position past the
2073 current end, and actually write data, you will extend the data object
2074 with zeros up to that position.
2075 @end table
2076
2077 If successful, the function returns the resulting file position,
2078 measured in bytes from the beginning of the data object.  You can use
2079 this feature together with @code{SEEK_CUR} to read the current
2080 read/write position.
2081
2082 If the function fails, -1 is returned and @var{errno} is set.
2083 @end deftypefun
2084
2085
2086 @node Data Buffer Meta-Data
2087 @subsection Data Buffer Meta-Data
2088 @cindex data buffer, meta-data
2089 @cindex data buffer, file name
2090 @cindex data buffer, encoding
2091
2092 @deftypefun {char *} gpgme_data_get_file_name (@w{gpgme_data_t @var{dh}})
2093 The function @code{gpgme_data_get_file_name} returns a pointer to a
2094 string containing the file name associated with the data object.  The
2095 file name will be stored in the output when encrypting or signing the
2096 data and will be returned to the user when decrypting or verifying the
2097 output data.
2098
2099 If no error occurs, the string containing the file name is returned.
2100 Otherwise, @code{NULL} will be returned.
2101 @end deftypefun
2102
2103
2104 @deftypefun gpgme_error_t gpgme_data_set_file_name (@w{gpgme_data_t @var{dh}}, @w{const char *@var{file_name}})
2105 The function @code{gpgme_data_set_file_name} sets the file name
2106 associated with the data object.  The file name will be stored in the
2107 output when encrypting or signing the data and will be returned to the
2108 user when decrypting or verifying the output data.
2109
2110 The function returns the error code @code{GPG_ERR_INV_VALUE} if
2111 @var{dh} is not a valid pointer and @code{GPG_ERR_ENOMEM} if not
2112 enough memory is available.
2113 @end deftypefun
2114
2115
2116 @deftp {Data type} {enum gpgme_data_encoding_t}
2117 @tindex gpgme_data_encoding_t
2118 The @code{gpgme_data_encoding_t} type specifies the encoding of a
2119 @code{gpgme_data_t} object.  For input data objects, the encoding is
2120 useful to give the backend a hint on the type of data.  For output
2121 data objects, the encoding can specify the output data format on
2122 certain operations.  Please note that not all backends support all
2123 encodings on all operations.  The following data types are available:
2124
2125 @table @code
2126 @item GPGME_DATA_ENCODING_NONE
2127 This specifies that the encoding is not known.  This is the default
2128 for a new data object.  The backend will try its best to detect the
2129 encoding automatically.
2130
2131 @item GPGME_DATA_ENCODING_BINARY
2132 This specifies that the data is encoding in binary form; i.e. there is
2133 no special encoding.
2134
2135 @item GPGME_DATA_ENCODING_BASE64
2136 This specifies that the data is encoded using the Base-64 encoding
2137 scheme as used by @acronym{MIME} and other protocols.
2138
2139 @item GPGME_DATA_ENCODING_ARMOR
2140 This specifies that the data is encoded in an armored form as used by
2141 OpenPGP and PEM.
2142
2143 @item GPGME_DATA_ENCODING_MIME
2144 This specifies that the data is encoded as a MIME part.
2145
2146 @item GPGME_DATA_ENCODING_URL
2147 The data is a list of linefeed delimited URLs.  This is only useful with
2148 @code{gpgme_op_import}.
2149
2150 @item GPGME_DATA_ENCODING_URL0
2151 The data is a list of binary zero delimited URLs.  This is only useful
2152 with @code{gpgme_op_import}.
2153
2154 @item GPGME_DATA_ENCODING_URLESC
2155 The data is a list of linefeed delimited URLs with all control and space
2156 characters percent escaped.  This mode is is not yet implemented.
2157
2158 @end table
2159 @end deftp
2160
2161 @deftypefun gpgme_data_encoding_t gpgme_data_get_encoding (@w{gpgme_data_t @var{dh}})
2162 The function @code{gpgme_data_get_encoding} returns the encoding of
2163 the data object with the handle @var{dh}.  If @var{dh} is not a valid
2164 pointer (e.g. @code{NULL}) @code{GPGME_DATA_ENCODING_NONE} is
2165 returned.
2166 @end deftypefun
2167
2168 @deftypefun gpgme_error_t gpgme_data_set_encoding (@w{gpgme_data_t @var{dh}, gpgme_data_encoding_t @var{enc}})
2169 The function @code{gpgme_data_set_encoding} changes the encoding of
2170 the data object with the handle @var{dh} to @var{enc}.
2171 @end deftypefun
2172
2173 @deftypefun {gpgme_error_t} gpgme_data_set_flag  @
2174             (@w{gpgme_data_t @var{dh}}, @
2175             @w{const char *@var{name}}, @
2176             @w{const char *@var{value}})
2177
2178 Some minor properties of the data object can be controlled with flags
2179 set by this function.  The properties are identified by the following
2180 values for @var{name}:
2181
2182 @table @code
2183 @item size-hint
2184 The value is a decimal number with the length gpgme shall assume for
2185 this data object.  This is useful if the data is provided by callbacks
2186 or via file descriptors but the applications knows the total size of
2187 the data.  If this is set the OpenPGP engine may use this to decide on
2188 buffer allocation strategies and to provide a total value for its
2189 progress information.
2190
2191 @end table
2192
2193 This function returns @code{0} on success.
2194 @end deftypefun
2195
2196
2197 @node Data Buffer Convenience
2198 @subsection Data Buffer Convenience Functions
2199 @cindex data buffer, convenience
2200 @cindex type of data
2201 @cindex identify
2202
2203 @deftp {Data type} {enum gpgme_data_type_t}
2204 @tindex gpgme_data_type_t
2205 The @code{gpgme_data_type_t} type is used to return the detected type
2206 of the content of a data buffer.
2207 @end deftp
2208
2209 @table @code
2210 @item GPGME_DATA_TYPE_INVALID
2211 This is returned by @code{gpgme_data_identify} if it was not possible
2212 to identify the data.  Reasons for this might be a non-seekable stream
2213 or a memory problem.  The value is 0.
2214 @item GPGME_DATA_TYPE_UNKNOWN
2215 The type of the data is not known.
2216 @item GPGME_DATA_TYPE_PGP_SIGNED
2217 The data is an OpenPGP signed message.  This may be a binary
2218 signature, a detached one or a cleartext signature.
2219 @item GPGME_DATA_TYPE_PGP_OTHER
2220 This is a generic OpenPGP message.  In most cases this will be
2221 encrypted data.
2222 @item GPGME_DATA_TYPE_PGP_KEY
2223 This is an OpenPGP key (private or public).
2224 @item GPGME_DATA_TYPE_CMS_SIGNED
2225 This is a CMS signed message.
2226 @item GPGME_DATA_TYPE_CMS_ENCRYPTED
2227 This is a CMS encrypted (enveloped data) message.
2228 @item GPGME_DATA_TYPE_CMS_OTHER
2229 This is used for other CMS message types.
2230 @item GPGME_DATA_TYPE_X509_CERT
2231 The data is a X.509 certificate
2232 @item GPGME_DATA_TYPE_PKCS12
2233 The data is a PKCS#12 message.  This is commonly used to exchange
2234 private keys for X.509.
2235 @end table
2236
2237 @deftypefun gpgme_data_type_t gpgme_data_identify (@w{gpgme_data_t @var{dh}})
2238 The function @code{gpgme_data_identify} returns the type of the data
2239 with the handle @var{dh}.  If it is not possible to perform the
2240 identification, the function returns zero
2241 (@code{GPGME_DATA_TYPE_INVALID}).  Note that depending on how the data
2242 object has been created the identification may not be possible or the
2243 data object may change its internal state (file pointer moved).  For
2244 file or memory based data object, the state should not change.
2245 @end deftypefun
2246
2247
2248 @c
2249 @c    Chapter Contexts
2250 @c
2251 @node Contexts
2252 @chapter Contexts
2253 @cindex context
2254
2255 All cryptographic operations in @acronym{GPGME} are performed within a
2256 context, which contains the internal state of the operation as well as
2257 configuration parameters.  By using several contexts you can run
2258 several cryptographic operations in parallel, with different
2259 configuration.
2260
2261 @deftp {Data type} {gpgme_ctx_t}
2262 The @code{gpgme_ctx_t} type is a handle for a @acronym{GPGME} context,
2263 which is used to hold the configuration, status and result of
2264 cryptographic operations.
2265 @end deftp
2266
2267 @menu
2268 * Creating Contexts::             Creating new @acronym{GPGME} contexts.
2269 * Destroying Contexts::           Releasing @acronym{GPGME} contexts.
2270 * Result Management::             Managing the result of crypto operations.
2271 * Context Attributes::            Setting properties of a context.
2272 * Key Management::                Managing keys with @acronym{GPGME}.
2273 * Trust Item Management::         Managing trust items with @acronym{GPGME}.
2274 * Crypto Operations::             Using a context for cryptography.
2275 * Miscellaneous::                 Miscellaneous operations
2276 * Run Control::                   Controlling how operations are run.
2277 @end menu
2278
2279
2280 @node Creating Contexts
2281 @section Creating Contexts
2282 @cindex context, creation
2283
2284 @deftypefun gpgme_error_t gpgme_new (@w{gpgme_ctx_t *@var{ctx}})
2285 The function @code{gpgme_new} creates a new @code{gpgme_ctx_t} object
2286 and returns a handle for it in @var{ctx}.
2287
2288 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
2289 context was successfully created, @code{GPG_ERR_INV_VALUE} if
2290 @var{ctx} is not a valid pointer, and @code{GPG_ERR_ENOMEM} if not
2291 enough memory is available.  Also, it returns
2292 @code{GPG_ERR_NOT_OPERATIONAL} if @code{gpgme_check_version} was not
2293 called to initialize GPGME, and @code{GPG_ERR_SELFTEST_FAILED} if a
2294 selftest failed.  Currently, the only selftest is for Windows MingW32
2295 targets to see if @code{-mms-bitfields} was used (as required).
2296 @end deftypefun
2297
2298
2299 @node Destroying Contexts
2300 @section Destroying Contexts
2301 @cindex context, destruction
2302
2303 @deftypefun void gpgme_release (@w{gpgme_ctx_t @var{ctx}})
2304 The function @code{gpgme_release} destroys the context with the handle
2305 @var{ctx} and releases all associated resources.
2306 @end deftypefun
2307
2308
2309 @node Result Management
2310 @section Result Management
2311 @cindex context, result of operation
2312
2313 The detailed result of an operation is returned in operation-specific
2314 structures such as @code{gpgme_decrypt_result_t}.  The corresponding
2315 retrieval functions such as @code{gpgme_op_decrypt_result} provide
2316 static access to the results after an operation completes.  Those
2317 structures shall be considered read-only and an application must not
2318 allocate such a structure on its own.  The following interfaces make
2319 it possible to detach a result structure from its associated context
2320 and give it a lifetime beyond that of the current operation or
2321 context.
2322
2323 @deftypefun void gpgme_result_ref (@w{void *@var{result}})
2324 The function @code{gpgme_result_ref} acquires an additional reference
2325 for the result @var{result}, which may be of any type
2326 @code{gpgme_*_result_t}.  As long as the user holds a reference, the
2327 result structure is guaranteed to be valid and unmodified.
2328 @end deftypefun
2329
2330 @deftypefun void gpgme_result_unref (@w{void *@var{result}})
2331 The function @code{gpgme_result_unref} releases a reference for the
2332 result @var{result}.  If this was the last reference, the result
2333 structure will be destroyed and all resources associated to it will be
2334 released.
2335 @end deftypefun
2336
2337 Note that a context may hold its own references to result structures,
2338 typically until the context is destroyed or the next operation is
2339 started.  In fact, these references are accessed through the
2340 @code{gpgme_op_*_result} functions.
2341
2342
2343 @node Context Attributes
2344 @section Context Attributes
2345 @cindex context, attributes
2346
2347 @menu
2348 * Protocol Selection::            Selecting the protocol used by a context.
2349 * Crypto Engine::                 Configuring the crypto engine.
2350 * Setting the Sender::            How to tell the engine the sender.
2351 * ASCII Armor::                   Requesting @acronym{ASCII} armored output.
2352 * Text Mode::                     Choosing canonical text mode.
2353 * Offline Mode::                  Choosing offline mode.
2354 * Pinentry Mode::                 Choosing the pinentry mode.
2355 * Included Certificates::         Including a number of certificates.
2356 * Key Listing Mode::              Selecting key listing mode.
2357 * Passphrase Callback::           Getting the passphrase from the user.
2358 * Progress Meter Callback::       Being informed about the progress.
2359 * Status Message Callback::       Status messages received from gpg.
2360 * Locale::                        Setting the locale of a context.
2361 @end menu
2362
2363
2364 @node Protocol Selection
2365 @subsection Protocol Selection
2366 @cindex context, selecting protocol
2367 @cindex protocol, selecting
2368
2369 @deftypefun gpgme_error_t gpgme_set_protocol (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_protocol_t @var{proto}})
2370 The function @code{gpgme_set_protocol} sets the protocol used within
2371 the context @var{ctx} to @var{proto}.  All crypto operations will be
2372 performed by the crypto engine configured for that protocol.
2373 @xref{Protocols and Engines}.
2374
2375 Setting the protocol with @code{gpgme_set_protocol} does not check if
2376 the crypto engine for that protocol is available and installed
2377 correctly.  @xref{Engine Version Check}.
2378
2379 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
2380 protocol could be set successfully, and @code{GPG_ERR_INV_VALUE} if
2381 @var{protocol} is not a valid protocol.
2382 @end deftypefun
2383
2384 @deftypefun gpgme_protocol_t gpgme_get_protocol (@w{gpgme_ctx_t @var{ctx}})
2385 The function @code{gpgme_get_protocol} retrieves the protocol currently
2386 use with the context @var{ctx}.
2387 @end deftypefun
2388
2389
2390 @node Crypto Engine
2391 @subsection Crypto Engine
2392 @cindex context, configuring engine
2393 @cindex engine, configuration per context
2394
2395 The following functions can be used to set and retrieve the
2396 configuration of the crypto engines of a specific context.  The
2397 default can also be retrieved without any particular context.
2398 @xref{Engine Information}.  The default can also be changed globally.
2399 @xref{Engine Configuration}.
2400
2401 @deftypefun gpgme_engine_info_t gpgme_ctx_get_engine_info (@w{gpgme_ctx_t @var{ctx}})
2402 The function @code{gpgme_ctx_get_engine_info} returns a linked list of
2403 engine info structures.  Each info structure describes the
2404 configuration of one configured backend, as used by the context
2405 @var{ctx}.
2406
2407 The result is valid until the next invocation of
2408 @code{gpgme_ctx_set_engine_info} for this particular context.
2409
2410 This function can not fail.
2411 @end deftypefun
2412
2413 @deftypefun gpgme_error_t gpgme_ctx_set_engine_info (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_protocol_t @var{proto}}, @w{const char *@var{file_name}}, @w{const char *@var{home_dir}})
2414 The function @code{gpgme_ctx_set_engine_info} changes the
2415 configuration of the crypto engine implementing the protocol
2416 @var{proto} for the context @var{ctx}.
2417
2418 @var{file_name} is the file name of the executable program
2419 implementing this protocol, and @var{home_dir} is the directory name
2420 of the configuration directory for this crypto engine.  If
2421 @var{home_dir} is @code{NULL}, the engine's default will be used.
2422
2423 Currently this function must be used before starting the first crypto
2424 operation.  It is unspecified if and when the changes will take effect
2425 if the function is called after starting the first operation on the
2426 context @var{ctx}.
2427
2428 This function returns the error code @code{GPG_ERR_NO_ERROR} if
2429 successful, or an eror code on failure.
2430 @end deftypefun
2431
2432
2433 @node Setting the Sender
2434 @subsection How to tell the engine the sender.
2435 @cindex context, sender
2436 @cindex sender
2437 @cindex From:
2438
2439 Some engines can make use of the sender’s address, for example to
2440 figure out the best user id in certain trust models.  For verification
2441 and signing of mails, it is thus suggested to let the engine know the
2442 sender ("From:") address.  @acronym{GPGME} provides two functions to
2443 accomplish that.  Note that the esoteric use of multiple "From:"
2444 addresses is not supported.
2445
2446 @deftypefun gpgme_error_t gpgme_set_sender @
2447       (@w{gpgme_ctx_t @var{ctx}}, @
2448        @w{int @var{address}})
2449
2450 The function @code{gpgme_set_sender} specifies the sender address for
2451 use in sign and verify operations.  @var{address} is expected to be
2452 the ``addr-spec'' part of an address but my also be a complete mailbox
2453 address, in which case this function extracts the ``addr-spec'' from
2454 it.  Using @code{NULL} for @var{address} clears the sender address.
2455
2456 The function returns 0 on success or an error code on failure.  The
2457 most likely failure is that no valid ``addr-spec'' was found in
2458 @var{address}.
2459
2460 @end deftypefun
2461
2462 @deftypefun @w{const char *} gpgme_get_sender @
2463       (@w{gpgme_ctx_t @var{ctx}})
2464
2465 The function @code{gpgme_get_sender} returns the current sender
2466 address from the context, or NULL if none was set.  The returned
2467 value is valid as long as the @var{ctx} is valid and
2468 @code{gpgme_set_sender} has not been called again.
2469
2470 @end deftypefun
2471
2472
2473
2474 @c FIXME: Unfortunately, using @acronym here breaks texi2dvi.
2475 @node ASCII Armor
2476 @subsection @acronym{ASCII} Armor
2477 @cindex context, armor mode
2478 @cindex @acronym{ASCII} armor
2479 @cindex armor mode
2480
2481 @deftypefun void gpgme_set_armor (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{yes}})
2482 The function @code{gpgme_set_armor} specifies if the output should be
2483 @acronym{ASCII} armored.  By default, output is not @acronym{ASCII}
2484 armored.
2485
2486 @acronym{ASCII} armored output is disabled if @var{yes} is zero, and
2487 enabled otherwise.
2488 @end deftypefun
2489
2490 @deftypefun int gpgme_get_armor (@w{gpgme_ctx_t @var{ctx}})
2491 The function @code{gpgme_get_armor} returns 1 if the output is
2492 @acronym{ASCII} armored, and @code{0} if it is not, or if @var{ctx} is
2493 not a valid pointer.
2494 @end deftypefun
2495
2496
2497 @node Text Mode
2498 @subsection Text Mode
2499 @cindex context, text mode
2500 @cindex text mode
2501 @cindex canonical text mode
2502
2503 @deftypefun void gpgme_set_textmode (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{yes}})
2504 The function @code{gpgme_set_textmode} specifies if canonical text mode
2505 should be used.  By default, text mode is not used.
2506
2507 Text mode is for example used for the RFC2015 signatures; note that
2508 the updated RFC 3156 mandates that the mail user agent does some
2509 preparations so that text mode is not needed anymore.
2510
2511 This option is only relevant to the OpenPGP crypto engine, and ignored
2512 by all other engines.
2513
2514 Canonical text mode is disabled if @var{yes} is zero, and enabled
2515 otherwise.
2516 @end deftypefun
2517
2518 @deftypefun int gpgme_get_textmode (@w{gpgme_ctx_t @var{ctx}})
2519 The function @code{gpgme_get_textmode} returns 1 if canonical text
2520 mode is enabled, and @code{0} if it is not, or if @var{ctx} is not a
2521 valid pointer.
2522 @end deftypefun
2523
2524
2525 @node Offline Mode
2526 @subsection Offline Mode
2527 @cindex context, offline mode
2528 @cindex offline mode
2529
2530 @deftypefun void gpgme_set_offline (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{yes}})
2531 The function @code{gpgme_set_offline} specifies if offline mode
2532 should be used.  By default, offline mode is not used.
2533
2534 The offline mode specifies if dirmngr should be used to do additional
2535 validation that might require connections to external services.
2536 (e.g. CRL / OCSP checks).
2537
2538 Offline mode only affects the keylist mode @code{GPGME_KEYLIST_MODE_VALIDATE}
2539 and is only relevant to the CMS crypto engine. Offline mode
2540 is ignored otherwise.
2541
2542 This option may be extended in the future to completely disable
2543 the use of dirmngr for any engine.
2544
2545 Offline mode is disabled if @var{yes} is zero, and enabled
2546 otherwise.
2547 @end deftypefun
2548
2549 @deftypefun int gpgme_get_offline (@w{gpgme_ctx_t @var{ctx}})
2550 The function @code{gpgme_get_offline} returns 1 if offline
2551 mode is enabled, and @code{0} if it is not, or if @var{ctx} is not a
2552 valid pointer.
2553 @end deftypefun
2554
2555
2556 @node Pinentry Mode
2557 @subsection Pinentry Mode
2558 @cindex context, pinentry mode
2559 @cindex pinentry mode
2560
2561 @deftypefun gpgme_error_t gpgme_set_pinentry_mode (@w{gpgme_ctx_t @var{ctx}},
2562 @w{gpgme_pinentry_mode_t @var{mode}})
2563 The function @code{gpgme_set_pinentry_mode} specifies the pinentry mode
2564 to be used.
2565
2566 For GnuPG >= 2.1 this option is required to be set to
2567 @code{GPGME_PINENTRY_MODE_LOOPBACK} to enable the passphrase callback
2568 mechanism in GPGME through @code{gpgme_set_passphrase_cb}.
2569 @end deftypefun
2570
2571 @deftypefun gpgme_pinentry_mode_t gpgme_get_pinentry_mode (@w{gpgme_ctx_t @var{ctx}})
2572 The function @code{gpgme_get_pinenty_mode} returns the
2573 mode set for the context.
2574 @end deftypefun
2575
2576 @deftp {Data type} {enum gpgme_pinentry_mode_t}
2577 @tindex gpgme_pinentry_mode_t
2578 The @code{gpgme_minentry_mode_t} type specifies the set of possible pinentry
2579 modes that are supported by @acronym{GPGME} if GnuPG >= 2.1 is used.
2580 The following modes are supported:
2581
2582 @table @code
2583 @item GPGME_PINENTRY_MODE_DEFAULT
2584 Use the default of the agent, which is ask.
2585
2586 @item GPGME_PINENTRY_MODE_ASK
2587 Force the use of the Pinentry.
2588
2589 @item GPGME_PINENTRY_MODE_CANCEL
2590 Emulate use of Pinentry's cancel button.
2591
2592 @item GPGME_PINENTRY_MODE_ERROR
2593 Return a Pinentry error @code{No Pinentry}.
2594
2595 @item GPGME_PINENTRY_MODE_LOOPBACK
2596 Redirect Pinentry queries to the caller.
2597 This enables the use of @code{gpgme_set_passphrase_cb} whis pinentry
2598 queries redirected to gpgme.
2599
2600 Note: This mode requires @code{allow-loopback-pinentry} to be enabled
2601 in the @file{gpg-agent.conf} or an agent started with that option.
2602
2603 @end table
2604 @end deftp
2605
2606
2607 @node Included Certificates
2608 @subsection Included Certificates
2609 @cindex certificates, included
2610
2611 @deftypefun void gpgme_set_include_certs (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{nr_of_certs}})
2612 The function @code{gpgme_set_include_certs} specifies how many
2613 certificates should be included in an S/MIME signed message.  By
2614 default, only the sender's certificate is included.  The possible
2615 values of @var{nr_of_certs} are:
2616
2617 @table @code
2618 @item GPGME_INCLUDE_CERTS_DEFAULT
2619 Fall back to the default of the crypto backend.  This is the default
2620 for GPGME.
2621 @item -2
2622 Include all certificates except the root certificate.
2623 @item -1
2624 Include all certificates.
2625 @item 0
2626 Include no certificates.
2627 @item 1
2628 Include the sender's certificate only.
2629 @item n
2630 Include the first n certificates of the certificates path, starting
2631 from the sender's certificate.  The number @code{n} must be positive.
2632 @end table
2633
2634 Values of @var{nr_of_certs} smaller than -2 are undefined.
2635
2636 This option is only relevant to the CMS crypto engine, and ignored by
2637 all other engines.
2638 @end deftypefun
2639
2640 @deftypefun int gpgme_get_include_certs (@w{gpgme_ctx_t @var{ctx}})
2641 The function @code{gpgme_get_include_certs} returns the number of
2642 certificates to include into an S/MIME signed message.
2643 @end deftypefun
2644
2645
2646 @node Key Listing Mode
2647 @subsection Key Listing Mode
2648 @cindex key listing mode
2649 @cindex key listing, mode of
2650
2651 @deftypefun gpgme_error_t gpgme_set_keylist_mode (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_keylist_mode_t @var{mode}})
2652 The function @code{gpgme_set_keylist_mode} changes the default
2653 behaviour of the key listing functions.  The value in @var{mode} is a
2654 bitwise-or combination of one or multiple of the following bit values:
2655
2656 @table @code
2657 @item GPGME_KEYLIST_MODE_LOCAL
2658 The @code{GPGME_KEYLIST_MODE_LOCAL} symbol specifies that the local
2659 keyring should be searched for keys in the keylisting operation.  This
2660 is the default.
2661
2662 @item GPGME_KEYLIST_MODE_EXTERN
2663 The @code{GPGME_KEYLIST_MODE_EXTERN} symbol specifies that an external
2664 source should be searched for keys in the keylisting operation.  The
2665 type of external source is dependant on the crypto engine used and
2666 whether it is combined with @code{GPGME_KEYLIST_MODE_LOCAL}.  For
2667 example, it can be a remote keyserver or LDAP certificate server.
2668
2669 @item GPGME_KEYLIST_MODE_SIGS
2670 The @code{GPGME_KEYLIST_MODE_SIGS} symbol specifies that the key
2671 signatures should be included in the listed keys.
2672
2673 @item GPGME_KEYLIST_MODE_SIG_NOTATIONS
2674 The @code{GPGME_KEYLIST_MODE_SIG_NOTATIONS} symbol specifies that the
2675 signature notations on key signatures should be included in the listed
2676 keys.  This only works if @code{GPGME_KEYLIST_MODE_SIGS} is also
2677 enabled.
2678
2679 @item GPGME_KEYLIST_MODE_WITH_TOFU
2680 The @code{GPGME_KEYLIST_MODE_WITH_TOFU} symbol specifies that
2681 information pertaining to the TOFU trust model should be included in
2682 the listed keys.
2683
2684 @item GPGME_KEYLIST_MODE_WITH_SECRET
2685 The @code{GPGME_KEYLIST_MODE_WITH_SECRET} returns information about
2686 the presence of a corresponding secret key in a public key listing.  A
2687 public key listing with this mode is slower than a standard listing
2688 but can be used instead of a second run to list the secret keys.  This
2689 is only supported for GnuPG versions >= 2.1.
2690
2691 @item GPGME_KEYLIST_MODE_EPHEMERAL
2692 The @code{GPGME_KEYLIST_MODE_EPHEMERAL} symbol specifies that keys
2693 flagged as ephemeral are included in the listing.
2694
2695 @item GPGME_KEYLIST_MODE_VALIDATE
2696 The @code{GPGME_KEYLIST_MODE_VALIDATE} symbol specifies that the
2697 backend should do key or certificate validation and not just get the
2698 validity information from an internal cache.  This might be an
2699 expensive operation and is in general not useful.  Currently only
2700 implemented for the S/MIME backend and ignored for other backends.
2701
2702 @end table
2703
2704 At least one of @code{GPGME_KEYLIST_MODE_LOCAL} and
2705 @code{GPGME_KEYLIST_MODE_EXTERN} must be specified.  For future binary
2706 compatibility, you should get the current mode with
2707 @code{gpgme_get_keylist_mode} and modify it by setting or clearing the
2708 appropriate bits, and then using that calculated value in the
2709 @code{gpgme_set_keylisting_mode} operation.  This will leave all other
2710 bits in the mode value intact (in particular those that are not used
2711 in the current version of the library).
2712
2713 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
2714 mode could be set correctly, and @code{GPG_ERR_INV_VALUE} if @var{ctx}
2715 is not a valid pointer or @var{mode} is not a valid mode.
2716 @end deftypefun
2717
2718
2719 @deftypefun gpgme_keylist_mode_t gpgme_get_keylist_mode (@w{gpgme_ctx_t @var{ctx}})
2720 The function @code{gpgme_get_keylist_mode} returns the current key
2721 listing mode of the context @var{ctx}.  This value can then be
2722 modified and used in a subsequent @code{gpgme_set_keylist_mode}
2723 operation to only affect the desired bits (and leave all others
2724 intact).
2725
2726 The function returns 0 if @var{ctx} is not a valid pointer, and the
2727 current mode otherwise.  Note that 0 is not a valid mode value.
2728 @end deftypefun
2729
2730
2731 @node Passphrase Callback
2732 @subsection Passphrase Callback
2733 @cindex callback, passphrase
2734 @cindex passphrase callback
2735
2736 @deftp {Data type} {gpgme_error_t (*gpgme_passphrase_cb_t)(void *@var{hook}, const char *@var{uid_hint}, const char *@var{passphrase_info}, @w{int @var{prev_was_bad}}, @w{int @var{fd}})}
2737 @tindex gpgme_passphrase_cb_t
2738 The @code{gpgme_passphrase_cb_t} type is the type of functions usable as
2739 passphrase callback function.
2740
2741 The argument @var{uid_hint} might contain a string that gives an
2742 indication for which user ID the passphrase is required.  If this is
2743 not available, or not applicable (in the case of symmetric encryption,
2744 for example), @var{uid_hint} will be @code{NULL}.
2745
2746 The argument @var{passphrase_info}, if not @code{NULL}, will give
2747 further information about the context in which the passphrase is
2748 required.  This information is engine and operation specific.
2749
2750 If this is the repeated attempt to get the passphrase, because
2751 previous attempts failed, then @var{prev_was_bad} is 1, otherwise it
2752 will be 0.
2753
2754 The user must write the passphrase, followed by a newline character,
2755 to the file descriptor @var{fd}.  The function @code{gpgme_io_writen}
2756 should be used for the write operation.  Note that if the user returns
2757 0 to indicate success, the user must at least write a newline
2758 character before returning from the callback.
2759
2760 If an error occurs, return the corresponding @code{gpgme_error_t}
2761 value.  You can use the error code @code{GPG_ERR_CANCELED} to abort
2762 the operation.  Otherwise, return @code{0}.
2763 @end deftp
2764
2765 @deftypefun void gpgme_set_passphrase_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_passphrase_cb_t @var{passfunc}}, @w{void *@var{hook_value}})
2766 The function @code{gpgme_set_passphrase_cb} sets the function that is
2767 used when a passphrase needs to be provided by the user to
2768 @var{passfunc}.  The function @var{passfunc} needs to implemented by
2769 the user, and whenever it is called, it is called with its first
2770 argument being @var{hook_value}.  By default, no passphrase callback
2771 function is set.
2772
2773 Not all crypto engines require this callback to retrieve the
2774 passphrase.  It is better if the engine retrieves the passphrase from
2775 a trusted agent (a daemon process), rather than having each user to
2776 implement their own passphrase query.  Some engines do not even
2777 support an external passphrase callback at all, in this case the error
2778 code @code{GPG_ERR_NOT_SUPPORTED} is returned.
2779
2780 For GnuPG >= 2.1 the pinentry mode has to be set to
2781 @code{GPGME_PINENTRY_MODE_LOOPBACK} to enable the passphrase callback.
2782 See @code{gpgme_set_pinentry_mode}.
2783
2784 The user can disable the use of a passphrase callback function by
2785 calling @code{gpgme_set_passphrase_cb} with @var{passfunc} being
2786 @code{NULL}.
2787 @end deftypefun
2788
2789 @deftypefun void gpgme_get_passphrase_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_passphrase_cb_t *@var{passfunc}}, @w{void **@var{hook_value}})
2790 The function @code{gpgme_get_passphrase_cb} returns the function that
2791 is used when a passphrase needs to be provided by the user in
2792 @var{*passfunc}, and the first argument for this function in
2793 @var{*hook_value}.  If no passphrase callback is set, or @var{ctx} is
2794 not a valid pointer, @code{NULL} is returned in both variables.
2795
2796 @var{passfunc} or @var{hook_value} can be @code{NULL}.  In this case,
2797 the corresponding value will not be returned.
2798 @end deftypefun
2799
2800
2801 @node Progress Meter Callback
2802 @subsection Progress Meter Callback
2803 @cindex callback, progress meter
2804 @cindex progress meter callback
2805
2806 @deftp {Data type} {void (*gpgme_progress_cb_t)(void *@var{hook}, const char *@var{what}, int @var{type}, int @var{current}, int @var{total})}
2807 @tindex gpgme_progress_cb_t
2808 The @code{gpgme_progress_cb_t} type is the type of functions usable as
2809 progress callback function.
2810
2811 The arguments are specific to the crypto engine.  More information
2812 about the progress information returned from the GnuPG engine can be
2813 found in the GnuPG source code in the file @file{doc/DETAILS} in the
2814 section PROGRESS.
2815 @end deftp
2816
2817 @deftypefun void gpgme_set_progress_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_progress_cb_t @var{progfunc}}, @w{void *@var{hook_value}})
2818 The function @code{gpgme_set_progress_cb} sets the function that is
2819 used when progress information about a cryptographic operation is
2820 available.  The function @var{progfunc} needs to implemented by the
2821 user, and whenever it is called, it is called with its first argument
2822 being @var{hook_value}.  By default, no progress callback function
2823 is set.
2824
2825 Setting a callback function allows an interactive program to display
2826 progress information about a long operation to the user.
2827
2828 The user can disable the use of a progress callback function by
2829 calling @code{gpgme_set_progress_cb} with @var{progfunc} being
2830 @code{NULL}.
2831 @end deftypefun
2832
2833 @deftypefun void gpgme_get_progress_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_progress_cb_t *@var{progfunc}}, @w{void **@var{hook_value}})
2834 The function @code{gpgme_get_progress_cb} returns the function that is
2835 used to inform the user about the progress made in @var{*progfunc},
2836 and the first argument for this function in @var{*hook_value}.  If no
2837 progress callback is set, or @var{ctx} is not a valid pointer,
2838 @code{NULL} is returned in both variables.
2839
2840 @var{progfunc} or @var{hook_value} can be @code{NULL}.  In this case,
2841 the corresponding value will not be returned.
2842 @end deftypefun
2843
2844
2845 @node Status Message Callback
2846 @subsection Status Message Callback
2847 @cindex callback, status message
2848 @cindex status message callback
2849
2850 @deftp {Data type} {gpgme_error_t (*gpgme_status_cb_t)(void *@var{hook}, const char *@var{keyword}, const char *@var{args})}
2851 @tindex gpgme_status_cb_t
2852 The @code{gpgme_status_cb_t} type is the type of function usable as
2853 a status message callback function.
2854
2855 The argument @var{keyword} is the name of the status message while the
2856 @var{args} argument contains any arguments for the status message.
2857
2858 If an error occurs, return the corresponding @code{gpgme_error_t}
2859 value. Otherwise, return @code{0}.
2860 @end deftp
2861
2862 @deftypefun void gpgme_set_status_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_status_cb_t @var{statusfunc}}, @w{void *@var{hook_value}})
2863 The function @code{gpgme_set_status_cb} sets the function that is used when a
2864 status message is received from gpg to @var{statusfunc}. The function
2865 @var{statusfunc} needs to be implemented by the user, and whenever it is
2866 called, it is called with its first argument being @var{hook_value}.  By
2867 default, no status message callback function is set.
2868
2869 The user can disable the use of a status message callback function by calling
2870 @code{gpgme_set_status_cb} with @var{statusfunc} being @code{NULL}.
2871 @end deftypefun
2872
2873 @deftypefun void gpgme_get_status_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_status_cb_t *@var{statusfunc}}, @w{void **@var{hook_value}})
2874 The function @code{gpgme_get_status_cb} returns the function that is used to
2875 process status messages from gpg in @var{*statusfunc}, and the first argument
2876 for this function in @var{*hook_value}.  If no status message callback is set,
2877 or @var{ctx} is not a valid pointer, @code{NULL} is returned in both
2878 variables.
2879 @end deftypefun
2880
2881 @deftypefun {gpgme_error_t} gpgme_set_ctx_flag  @
2882             (@w{gpgme_ctx_t @var{ctx}}, @
2883             @w{const char *@var{name}}, @
2884             @w{const char *@var{value}})
2885
2886 Some minor properties of the context can be controlled with flags set
2887 by this function.  The properties are identified by the following
2888 values for @var{name}:
2889
2890 @table @code
2891 @item "redraw"
2892 This flag is normally not changed by the caller because GPGME sets and
2893 clears it automatically: The flag is cleared before an operation and
2894 set if an operation noticed that the engine has launched a Pinentry.
2895 A Curses based application may use this information to redraw the
2896 screen; for example:
2897
2898 @example
2899     err = gpgme_op_keylist_start (ctx, "foo@@example.org", 0);
2900     while (!err)
2901       @{
2902         err = gpgme_op_keylist_next (ctx, &key);
2903         if (err)
2904           break;
2905         show_key (key);
2906         gpgme_key_release (key);
2907       @}
2908     if ((s = gpgme_get_ctx_flag (ctx, "redraw")) && *s)
2909       redraw_screen ();
2910     gpgme_release (ctx);
2911 @end example
2912
2913
2914 @item "full-status"
2915 Using a @var{value} of "1" the status callback set by
2916 gpgme_set_status_cb returns all status lines with the exception of
2917 PROGRESS lines.  With the default of "0" the status callback is only
2918 called in certain situations.
2919
2920 @item "raw-description"
2921 Setting the @var{value} to "1" returns human readable strings in a raw
2922 format.  For example the non breaking space characters ("~") will not
2923 be removed from the @code{description} field of the
2924 @code{gpgme_tofu_info_t} object.
2925
2926 @item "export-session-key"
2927 Using a @var{value} of "1" specifies that the context should try to
2928 export the symmetric session key when decrypting data.  By default, or
2929 when using an empty string or "0" for @var{value}, session keys are
2930 not exported.
2931
2932 @item "override-session-key"
2933 The string given in @var{value} is passed to the GnuPG engine to override
2934 the session key for decryption.  The format of that session key is
2935 specific to GnuPG and can be retrieved during a decrypt operation when
2936 the context flag "export-session-key" is enabled.  Please be aware that
2937 using this feature with GnuPG < 2.1.16 will leak the session key on
2938 many platforms via ps(1).
2939
2940 @end table
2941
2942 This function returns @code{0} on success.
2943 @end deftypefun
2944
2945
2946 @deftypefun {const char *} gpgme_get_ctx_flag  @
2947             (@w{gpgme_ctx_t @var{ctx}}, @
2948             @w{const char *@var{name}})
2949
2950 The value of flags settable by @code{gpgme_set_ctx_flag} can be
2951 retrieved by this function.  If @var{name} is unknown the function
2952 returns @code{NULL}.  For boolean flags an empty string is returned
2953 for False and the string "1" is returned for True; either atoi(3) or a
2954 test for an empty string can be used to get the boolean value.
2955
2956 @end deftypefun
2957
2958
2959 @node Locale
2960 @subsection Locale
2961 @cindex locale, default
2962 @cindex locale, of a context
2963
2964 A locale setting can be associated with a context.  This locale is
2965 passed to the crypto engine, and used for applications like the PIN
2966 entry, which is displayed to the user when entering a passphrase is
2967 required.
2968
2969 The default locale is used to initialize the locale setting of all
2970 contexts created afterwards.
2971
2972 @deftypefun gpgme_error_t gpgme_set_locale (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{category}}, @w{const char *@var{value}})
2973 The function @code{gpgme_set_locale} sets the locale of the context
2974 @var{ctx}, or the default locale if @var{ctx} is a null pointer.
2975
2976 The locale settings that should be changed are specified by
2977 @var{category}.  Supported categories are @code{LC_CTYPE},
2978 @code{LC_MESSAGES}, and @code{LC_ALL}, which is a wildcard you can use
2979 if you want to change all the categories at once.
2980
2981 The value to be used for the locale setting is @var{value}, which will
2982 be copied to @acronym{GPGME}'s internal data structures.  @var{value}
2983 can be a null pointer, which disables setting the locale, and will
2984 make PIN entry and other applications use their default setting, which
2985 is usually not what you want.
2986
2987 Note that the settings are only used if the application runs on a text
2988 terminal, and that the settings should fit the configuration of the
2989 output terminal.  Normally, it is sufficient to initialize the default
2990 value at startup.
2991
2992 The function returns an error if not enough memory is available.
2993 @end deftypefun
2994
2995
2996 @node Key Management
2997 @section Key Management
2998 @cindex key management
2999
3000 Some of the cryptographic operations require that recipients or
3001 signers are specified.  This is always done by specifying the
3002 respective keys that should be used for the operation.  The following
3003 section describes how such keys can be selected and manipulated.
3004
3005
3006 @menu
3007 * Key objects::                   Description of the key structures.
3008 * Listing Keys::                  Browsing the list of available keys.
3009 * Information About Keys::        Requesting detailed information about keys.
3010 * Manipulating Keys::             Operations on keys.
3011 * Generating Keys::               Creating new key pairs.
3012 * Signing Keys::                  Adding key signatures to public keys.
3013 * Exporting Keys::                Retrieving key data from the key ring.
3014 * Importing Keys::                Adding keys to the key ring.
3015 * Deleting Keys::                 Removing keys from the key ring.
3016 * Changing Passphrases::          Change the passphrase of a key.
3017 * Changing TOFU Data::            Changing data pertaining to TOFU.
3018 * Advanced Key Editing::          Advanced key edit operation.
3019 @end menu
3020
3021 @node Key objects
3022 @subsection Key objects
3023
3024 The keys are represented in GPGME by structures which may only be read
3025 by the application but never be allocated or changed.  They are valid
3026 as long as the key object itself is valid.
3027
3028 @deftp {Data type} gpgme_key_t
3029
3030 The @code{gpgme_key_t} type is a pointer to a key object.  It has the
3031 following members:
3032
3033 @table @code
3034 @item gpgme_keylist_mode_t keylist_mode
3035 The keylist mode that was active when the key was retrieved.
3036
3037 @item unsigned int revoked : 1
3038 This is true if the key is revoked.
3039
3040 @item unsigned int expired : 1
3041 This is true if the key is expired.
3042
3043 @item unsigned int disabled : 1
3044 This is true if the key is disabled.
3045
3046 @item unsigned int invalid : 1
3047 This is true if the key is invalid. This might have several reasons,
3048 for a example for the S/MIME backend, it will be set during key
3049 listings if the key could not be validated due to missing
3050 certificates or unmatched policies.
3051
3052 @item unsigned int can_encrypt : 1
3053 This is true if the key (ie one of its subkeys) can be used for
3054 encryption.
3055
3056 @item unsigned int can_sign : 1
3057 This is true if the key (ie one of its subkeys) can be used to create
3058 data signatures.
3059
3060 @item unsigned int can_certify : 1
3061 This is true if the key (ie one of its subkeys) can be used to create
3062 key certificates.
3063
3064 @item unsigned int can_authenticate : 1
3065 This is true if the key (ie one of its subkeys) can be used for
3066 authentication.
3067
3068 @item unsigned int is_qualified : 1
3069 This is true if the key can be used for qualified signatures according
3070 to local government regulations.
3071
3072 @item unsigned int secret : 1
3073 This is true if the key is a secret key.  Note, that this will always
3074 be true even if the corresponding subkey flag may be false
3075 (offline/stub keys).  This is only set if a listing of secret keys has
3076 been requested or if @code{GPGME_KEYLIST_MODE_WITH_SECRET} is active.
3077
3078 @item gpgme_protocol_t protocol
3079 This is the protocol supported by this key.
3080
3081 @item char *issuer_serial
3082 If @code{protocol} is @code{GPGME_PROTOCOL_CMS}, then this is the
3083 issuer serial.
3084
3085 @item char *issuer_name
3086 If @code{protocol} is @code{GPGME_PROTOCOL_CMS}, then this is the
3087 issuer name.
3088
3089 @item char *chain_id
3090 If @code{protocol} is @code{GPGME_PROTOCOL_CMS}, then this is the
3091 chain ID, which can be used to built the certificate chain.
3092
3093 @item gpgme_validity_t owner_trust
3094 If @code{protocol} is @code{GPGME_PROTOCOL_OpenPGP}, then this is the
3095 owner trust.
3096
3097 @item gpgme_subkey_t subkeys
3098 This is a linked list with the subkeys of the key.  The first subkey
3099 in the list is the primary key and usually available.
3100
3101 @item gpgme_user_id_t uids
3102 This is a linked list with the user IDs of the key.  The first user ID
3103 in the list is the main (or primary) user ID.
3104
3105 @item char *fpr
3106 This field gives the fingerprint of the primary key.  Note that
3107 this is a copy of the fingerprint of the first subkey.  For an
3108 incomplete key (for example from a verification result) a subkey may
3109 be missing but this field may be set nevertheless.
3110
3111 @end table
3112 @end deftp
3113
3114
3115 @deftp {Data type} gpgme_subkey_t
3116
3117 The @code{gpgme_subkey_t} type is a pointer to a subkey structure.
3118 Subkeys are one component of a @code{gpgme_key_t} object.  In fact,
3119 subkeys are those parts that contains the real information about the
3120 individual cryptographic keys that belong to the same key object.  One
3121 @code{gpgme_key_t} can contain several subkeys.  The first subkey in
3122 the linked list is also called the primary key.
3123
3124 The subkey structure has the following members:
3125
3126 @table @code
3127 @item gpgme_subkey_t next
3128 This is a pointer to the next subkey structure in the linked list, or
3129 @code{NULL} if this is the last element.
3130
3131 @item unsigned int revoked : 1
3132 This is true if the subkey is revoked.
3133
3134 @item unsigned int expired : 1
3135 This is true if the subkey is expired.
3136
3137 @item unsigned int disabled : 1
3138 This is true if the subkey is disabled.
3139
3140 @item unsigned int invalid : 1
3141 This is true if the subkey is invalid.
3142
3143 @item unsigned int can_encrypt : 1
3144 This is true if the subkey can be used for encryption.
3145
3146 @item unsigned int can_sign : 1
3147 This is true if the subkey can be used to create data signatures.
3148
3149 @item unsigned int can_certify : 1
3150 This is true if the subkey can be used to create key certificates.
3151
3152 @item unsigned int can_authenticate : 1
3153 This is true if the subkey can be used for authentication.
3154
3155 @item unsigned int is_qualified : 1
3156 This is true if the subkey can be used for qualified signatures
3157 according to local government regulations.
3158
3159 @item unsigned int is_de_vs : 1
3160 This is true if the subkey complies with the rules for classified
3161 information in Germany at the restricted level (VS-NfD).  This are
3162 currently RSA keys of at least 2048 bits or ECDH/ECDSA keys using a
3163 Brainpool curve.
3164
3165 @item unsigned int secret : 1
3166 This is true if the subkey is a secret key.  Note that it will be
3167 false if the key is actually a stub key; i.e. a secret key operation
3168 is currently not possible (offline-key).  This is only set if a
3169 listing of secret keys has been requested or if
3170 @code{GPGME_KEYLIST_MODE_WITH_SECRET} is active.
3171
3172 @item gpgme_pubkey_algo_t pubkey_algo
3173 This is the public key algorithm supported by this subkey.
3174
3175 @item unsigned int length
3176 This is the length of the subkey (in bits).
3177
3178 @item char *keyid
3179 This is the key ID of the subkey in hexadecimal digits.
3180
3181 @item char *fpr
3182 This is the fingerprint of the subkey in hexadecimal digits, if
3183 available.
3184
3185 @item char *keygrip
3186 The keygrip of the subkey in hex digit form or @code{NULL} if not
3187 availabale.
3188
3189 @item long int timestamp
3190 This is the creation timestamp of the subkey.  This is -1 if the
3191 timestamp is invalid, and 0 if it is not available.
3192
3193 @item long int expires
3194 This is the expiration timestamp of the subkey, or 0 if the subkey
3195 does not expire.
3196
3197 @item unsigned int is_cardkey : 1
3198 True if the secret key is stored on a smart card.
3199
3200 @item char *card_number
3201 The serial number of a smart card holding this key or @code{NULL}.
3202
3203 @item char *curve
3204 For ECC algorithms the name of the curve.
3205
3206 @end table
3207 @end deftp
3208
3209 @deftp {Data type} gpgme_user_id_t
3210
3211 A user ID is a component of a @code{gpgme_key_t} object.  One key can
3212 have many user IDs.  The first one in the list is the main (or
3213 primary) user ID.
3214
3215 The user ID structure has the following members.
3216
3217 @table @code
3218 @item gpgme_user_id_t next
3219 This is a pointer to the next user ID structure in the linked list, or
3220 @code{NULL} if this is the last element.
3221
3222 @item unsigned int revoked : 1
3223 This is true if the user ID is revoked.
3224
3225 @item unsigned int invalid : 1
3226 This is true if the user ID is invalid.
3227
3228 @item gpgme_validity_t validity
3229 This specifies the validity of the user ID.
3230
3231 @item char *uid
3232 This is the user ID string.
3233
3234 @item char *name
3235 This is the name component of @code{uid}, if available.
3236
3237 @item char *comment
3238 This is the comment component of @code{uid}, if available.
3239
3240 @item char *email
3241 This is the email component of @code{uid}, if available.
3242
3243 @item char *address;
3244 The mail address (addr-spec from RFC-5322) of the user ID string.
3245 This is general the same as the @code{email} part of this structure
3246 but might be slightly different.  If no mail address is available
3247 @code{NULL} is stored.
3248
3249 @item gpgme_tofu_info_t tofu
3250 If not @code{NULL} information from the TOFU database pertaining to
3251 this user id.
3252
3253 @item gpgme_key_sig_t signatures
3254 This is a linked list with the signatures on this user ID.
3255 @end table
3256 @end deftp
3257
3258
3259 @deftp {Data type} gpgme_key_sig_t
3260
3261 The @code{gpgme_key_sig_t} type is a pointer to a key signature structure.
3262 Key signatures are one component of a @code{gpgme_key_t} object, and
3263 validate user IDs on the key in the OpenPGP protocol.
3264
3265 The signatures on a key are only available if the key was retrieved
3266 via a listing operation with the @code{GPGME_KEYLIST_MODE_SIGS} mode
3267 enabled, because it can be expensive to retrieve all signatures of a
3268 key.
3269
3270 The signature notations on a key signature are only available if the
3271 key was retrieved via a listing operation with the
3272 @code{GPGME_KEYLIST_MODE_SIG_NOTATIONS} mode enabled, because it can
3273 be expensive to retrieve all signature notations.
3274
3275 The key signature structure has the following members:
3276
3277 @table @code
3278 @item gpgme_key_sig_t next
3279 This is a pointer to the next key signature structure in the linked
3280 list, or @code{NULL} if this is the last element.
3281
3282 @item unsigned int revoked : 1
3283 This is true if the key signature is a revocation signature.
3284
3285 @item unsigned int expired : 1
3286 This is true if the key signature is expired.
3287
3288 @item unsigned int invalid : 1
3289 This is true if the key signature is invalid.
3290
3291 @item unsigned int exportable : 1
3292 This is true if the key signature is exportable.
3293
3294 @item gpgme_pubkey_algo_t pubkey_algo
3295 This is the public key algorithm used to create the signature.
3296
3297 @item char *keyid
3298 This is the key ID of the key (in hexadecimal digits) used to create
3299 the signature.
3300
3301 @item long int timestamp
3302 This is the creation timestamp of the key signature.  This is -1 if
3303 the timestamp is invalid, and 0 if it is not available.
3304
3305 @item long int expires
3306 This is the expiration timestamp of the key signature, or 0 if the key
3307 signature does not expire.
3308
3309 @item gpgme_error_t status
3310 This is the status of the signature and has the same meaning as the
3311 member of the same name in a @code{gpgme_signature_t} object.
3312
3313 @item unsigned int sig_class
3314 This specifies the signature class of the key signature.  The meaning
3315 is specific to the crypto engine.
3316
3317 @item char *uid
3318 This is the main user ID of the key used to create the signature.
3319
3320 @item char *name
3321 This is the name component of @code{uid}, if available.
3322
3323 @item char *comment
3324 This is the comment component of @code{uid}, if available.
3325
3326 @item char *email
3327 This is the email component of @code{uid}, if available.
3328
3329 @item gpgme_sig_notation_t notations
3330 This is a linked list with the notation data and policy URLs.
3331 @end table
3332 @end deftp
3333
3334
3335
3336 @node Listing Keys
3337 @subsection Listing Keys
3338 @cindex listing keys
3339 @cindex key listing
3340 @cindex key listing, start
3341 @cindex key ring, list
3342 @cindex key ring, search
3343
3344 @deftypefun gpgme_error_t gpgme_op_keylist_start (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}}, @w{int @var{secret_only}})
3345 The function @code{gpgme_op_keylist_start} initiates a key listing
3346 operation inside the context @var{ctx}.  It sets everything up so that
3347 subsequent invocations of @code{gpgme_op_keylist_next} return the keys
3348 in the list.
3349
3350 If @var{pattern} is @code{NULL}, all available keys are returned.
3351 Otherwise, @var{pattern} contains an engine specific expression that
3352 is used to limit the list to all keys matching the pattern.  Note that
3353 the total length of the pattern is restricted to an engine-specific
3354 maximum (a couple of hundred characters are usually accepted).  The
3355 pattern should be used to restrict the search to a certain common name
3356 or user, not to list many specific keys at once by listing their
3357 fingerprints or key IDs.
3358
3359 If @var{secret_only} is not @code{0}, the list is restricted to secret
3360 keys only.
3361
3362 The context will be busy until either all keys are received (and
3363 @code{gpgme_op_keylist_next} returns @code{GPG_ERR_EOF}), or
3364 @code{gpgme_op_keylist_end} is called to finish the operation.
3365
3366 The function returns the error code @code{GPG_ERR_INV_VALUE} if
3367 @var{ctx} is not a valid pointer, and passes through any errors that
3368 are reported by the crypto engine support routines.
3369 @end deftypefun
3370
3371 @deftypefun gpgme_error_t gpgme_op_keylist_ext_start (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}[]}, @w{int @var{secret_only}}, @w{int @var{reserved}})
3372 The function @code{gpgme_op_keylist_ext_start} initiates an extended
3373 key listing operation inside the context @var{ctx}.  It sets
3374 everything up so that subsequent invocations of
3375 @code{gpgme_op_keylist_next} return the keys in the list.
3376
3377 If @var{pattern} or @var{*pattern} is @code{NULL}, all available keys
3378 are returned.  Otherwise, @var{pattern} is a @code{NULL} terminated
3379 array of strings that are used to limit the list to all keys matching
3380 at least one of the patterns verbatim.  Note that the total length of
3381 all patterns is restricted to an engine-specific maximum (the exact
3382 limit also depends on the number of patterns and amount of quoting
3383 required, but a couple of hundred characters are usually accepted).
3384 Patterns should be used to restrict the search to a certain common
3385 name or user, not to list many specific keys at once by listing their
3386 fingerprints or key IDs.
3387
3388 If @var{secret_only} is not @code{0}, the list is restricted to secret
3389 keys only.
3390
3391 The value of @var{reserved} must be @code{0}.
3392
3393 The context will be busy until either all keys are received (and
3394 @code{gpgme_op_keylist_next} returns @code{GPG_ERR_EOF}), or
3395 @code{gpgme_op_keylist_end} is called to finish the operation.
3396
3397 The function returns the error code @code{GPG_ERR_INV_VALUE} if
3398 @var{ctx} is not a valid pointer, and passes through any errors that
3399 are reported by the crypto engine support routines.
3400 @end deftypefun
3401
3402 @deftypefun gpgme_error_t gpgme_op_keylist_next (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t *@var{r_key}})
3403 The function @code{gpgme_op_keylist_next} returns the next key in the
3404 list created by a previous @code{gpgme_op_keylist_start} operation in
3405 the context @var{ctx}.  The key will have one reference for the user.
3406 @xref{Manipulating Keys}.
3407
3408 This is the only way to get at @code{gpgme_key_t} objects in
3409 @acronym{GPGME}.
3410
3411 If the last key in the list has already been returned,
3412 @code{gpgme_op_keylist_next} returns @code{GPG_ERR_EOF}.
3413
3414 The function returns the error code @code{GPG_ERR_INV_VALUE} if
3415 @var{ctx} or @var{r_key} is not a valid pointer, and
3416 @code{GPG_ERR_ENOMEM} if there is not enough memory for the operation.
3417 @end deftypefun
3418
3419 @deftypefun gpgme_error_t gpgme_op_keylist_end (@w{gpgme_ctx_t @var{ctx}})
3420 The function @code{gpgme_op_keylist_end} ends a pending key list
3421 operation in the context @var{ctx}.
3422
3423 After the operation completed successfully, the result of the key
3424 listing operation can be retrieved with
3425 @code{gpgme_op_keylist_result}.
3426
3427 The function returns the error code @code{GPG_ERR_INV_VALUE} if
3428 @var{ctx} is not a valid pointer, and @code{GPG_ERR_ENOMEM} if at some
3429 time during the operation there was not enough memory available.
3430 @end deftypefun
3431
3432 The following example illustrates how all keys containing a certain
3433 string (@code{g10code}) can be listed with their key ID and the name
3434 and e-mail address of the main user ID:
3435
3436 @example
3437 gpgme_ctx_t ctx;
3438 gpgme_key_t key;
3439 gpgme_error_t err = gpgme_new (&ctx);
3440
3441 if (!err)
3442   @{
3443     err = gpgme_op_keylist_start (ctx, "g10code", 0);
3444     while (!err)
3445       @{
3446         err = gpgme_op_keylist_next (ctx, &key);
3447         if (err)
3448           break;
3449         printf ("%s:", key->subkeys->keyid);
3450         if (key->uids && key->uids->name)
3451           printf (" %s", key->uids->name);
3452         if (key->uids && key->uids->email)
3453           printf (" <%s>", key->uids->email);
3454         putchar ('\n');
3455         gpgme_key_release (key);
3456       @}
3457     gpgme_release (ctx);
3458   @}
3459 if (gpg_err_code (err) != GPG_ERR_EOF)
3460   @{
3461     fprintf (stderr, "can not list keys: %s\n", gpgme_strerror (err));
3462     exit (1);
3463   @}
3464 @end example
3465
3466 @deftp {Data type} {gpgme_keylist_result_t}
3467 This is a pointer to a structure used to store the result of a
3468 @code{gpgme_op_keylist_*} operation.  After successfully ending a key
3469 listing operation, you can retrieve the pointer to the result with
3470 @code{gpgme_op_keylist_result}.  The structure contains the following
3471 member:
3472
3473 @table @code
3474 @item unsigned int truncated : 1
3475 This is true if the crypto backend had to truncate the result, and
3476 less than the desired keys could be listed.
3477 @end table
3478 @end deftp
3479
3480 @deftypefun gpgme_keylist_result_t gpgme_op_keylist_result (@w{gpgme_ctx_t @var{ctx}})
3481 The function @code{gpgme_op_keylist_result} returns a
3482 @code{gpgme_keylist_result_t} pointer to a structure holding the
3483 result of a @code{gpgme_op_keylist_*} operation.  The pointer is only
3484 valid if the last operation on the context was a key listing
3485 operation, and if this operation finished successfully.  The returned
3486 pointer is only valid until the next operation is started on the
3487 context.
3488 @end deftypefun
3489
3490 In a simple program, for which a blocking operation is acceptable, the
3491 following function can be used to retrieve a single key.
3492
3493 @deftypefun gpgme_error_t gpgme_get_key (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{fpr}}, @w{gpgme_key_t *@var{r_key}}, @w{int @var{secret}})
3494 The function @code{gpgme_get_key} gets the key with the fingerprint
3495 (or key ID) @var{fpr} from the crypto backend and return it in
3496 @var{r_key}.  If @var{secret} is true, get the secret key.  The
3497 currently active keylist mode is used to retrieve the key.  The key
3498 will have one reference for the user.
3499
3500 If the key is not found in the keyring, @code{gpgme_get_key} returns
3501 the error code @code{GPG_ERR_EOF} and *@var{r_key} will be set to
3502 @code{NULL}.
3503
3504 The function returns the error code @code{GPG_ERR_INV_VALUE} if
3505 @var{ctx} or @var{r_key} is not a valid pointer or @var{fpr} is not a
3506 fingerprint or key ID, @code{GPG_ERR_AMBIGUOUS_NAME} if the key ID was
3507 not a unique specifier for a key, and @code{GPG_ERR_ENOMEM} if at some
3508 time during the operation there was not enough memory available.
3509 @end deftypefun
3510
3511
3512 @node Information About Keys
3513 @subsection Information About Keys
3514 @cindex key, information about
3515 @cindex key, attributes
3516 @cindex attributes, of a key
3517
3518 Please see the beginning of this section for more information about
3519 @code{gpgme_key_t} objects.
3520
3521 @deftp {Data type} gpgme_validity_t
3522 The @code{gpgme_validity_t} type is used to specify the validity of a user ID
3523 in a key.  The following validities are defined:
3524
3525 @table @code
3526 @item GPGME_VALIDITY_UNKNOWN
3527 The user ID is of unknown validity.  The string representation of this
3528 validity is ``?''.
3529
3530 @item GPGME_VALIDITY_UNDEFINED
3531 The validity of the user ID is undefined.  The string representation of this
3532 validity is ``q''.
3533
3534 @item GPGME_VALIDITY_NEVER
3535 The user ID is never valid.  The string representation of this
3536 validity is ``n''.
3537
3538 @item GPGME_VALIDITY_MARGINAL
3539 The user ID is marginally valid.  The string representation of this
3540 validity is ``m''.
3541
3542 @item GPGME_VALIDITY_FULL
3543 The user ID is fully valid.  The string representation of this
3544 validity is ``f''.
3545
3546 @item GPGME_VALIDITY_ULTIMATE
3547 The user ID is ultimately valid.  The string representation of this
3548 validity is ``u''.
3549 @end table
3550 @end deftp
3551
3552
3553
3554
3555 @node Manipulating Keys
3556 @subsection Manipulating Keys
3557 @cindex key, manipulation
3558
3559 @deftypefun void gpgme_key_ref (@w{gpgme_key_t @var{key}})
3560 The function @code{gpgme_key_ref} acquires an additional reference for
3561 the key @var{key}.
3562 @end deftypefun
3563
3564 @deftypefun void gpgme_key_unref (@w{gpgme_key_t @var{key}})
3565 The function @code{gpgme_key_unref} releases a reference for the key
3566 @var{key}.  If this was the last reference, the key will be destroyed
3567 and all resources associated to it will be released.
3568 @end deftypefun
3569
3570
3571 @node Generating Keys
3572 @subsection Generating Keys
3573 @cindex key, creation
3574 @cindex key ring, add
3575
3576 GPGME provides a set of functions to create public key pairs.  Most of
3577 these functions require the use of GnuPG 2.1 and later; for older
3578 GnuPG versions the @code{gpgme_op_genkey} function can be used.
3579 Existing code which wants to update to the new functions or new code
3580 which shall supports older GnuPG versions may try the new functions
3581 first and provide a fallback to the old function if the error code
3582 @code{GPG_ERR_NOT_SUPPORTED} is received.
3583
3584 @c
3585 @c  gpgme_op_createkey
3586 @c
3587 @deftypefun gpgme_error_t gpgme_op_createkey @
3588       (@w{gpgme_ctx_t @var{ctx}}, @
3589        @w{const char *@var{userid}}, @
3590        @w{const char *@var{algo}}, @
3591        @w{unsigned long @var{reserved}}, @
3592        @w{unsigned long @var{expires}}, @
3593        @w{gpgme_key_t @var{extrakey}}, @
3594        @w{unsigned int @var{flags}});
3595
3596 The function @code{gpgme_op_createkey} generates a new key for the
3597 procotol active in the context @var{ctx}.  As of now this function
3598 does only work for OpenPGP and requires at least version 2.1.13 of
3599 GnuPG.
3600
3601 @var{userid} is commonly the mail address associated with the key.
3602 GPGME does not require a specificy syntax but if more than a mail
3603 address is given, RFC-822 style format is suggested.  The value is
3604 expected to be in UTF-8 encoding (i.e. no IDN encoding for mail
3605 addresses).  This is a required parameter.
3606
3607 @var{algo} specifies the algorithm for the new key (actually a keypair
3608 of public and private key).  For a list of supported algorithms, see
3609 the GnuPG manual.  If @var{algo} is @code{NULL} or the string
3610 "default", the key is generated using the default algorithm of the
3611 engine.  If the string "future-default" is used the engine may use an
3612 algorithm which is planned to be the default in a future release of
3613 the engine; however existing implementation of the protocol may not be
3614 able to already handle such future algorithms.  For the OpenPGP
3615 protocol, the specification of a default algorithm, without requesting
3616 a non-default usage via @var{flags}, triggers the creation of a
3617 primary key plus a secondary key (subkey).
3618
3619 @var{reserved} must be set to zero.
3620
3621 @var{expires} specifies the expiration time in seconds.  If you supply
3622 0, a reasonable expiration time is chosen.  Use the flag
3623 @code{GPGME_CREATE_NOEXPIRE} to create keys that do not expire.  Note
3624 that this parameter takes an unsigned long value and not a
3625 @code{time_t} to avoid problems on systems which use a signed 32 bit
3626 @code{time_t}.  Note further that the OpenPGP protocol uses 32 bit
3627 values for timestamps and thus can only encode dates up to the year
3628 2106.
3629
3630 @var{extrakey} is currently not used and must be set to @code{NULL}.
3631 A future version of GPGME may use this parameter to create X.509 keys.
3632
3633 @var{flags} can be set to the bit-wise OR of the following flags:
3634
3635 @table @code
3636 @item GPGME_CREATE_SIGN
3637 @itemx GPGME_CREATE_ENCR
3638 @itemx GPGME_CREATE_CERT
3639 @itemx GPGME_CREATE_AUTH
3640 Do not create the key with the default capabilities (key usage) of the
3641 requested algorithm but use those explicitly given by these flags:
3642 ``signing'', ``encryption'', ``certification'', or ``authentication''.
3643 The allowed combinations depend on the algorithm.
3644
3645 If any of these flags are set and a default algorithm has been
3646 selected only one key is created in the case of the OpenPGP
3647 protocol.
3648
3649 @item GPGME_CREATE_NOPASSWD
3650 Request generation of the key without password protection.
3651
3652 @item GPGME_CREATE_SELFSIGNED
3653 For an X.509 key do not create a CSR but a self-signed certificate.
3654 This has not yet been implemented.
3655
3656 @item GPGME_CREATE_NOSTORE
3657 Do not store the created key in the local key database.
3658 This has not yet been implemented.
3659
3660 @item GPGME_CREATE_WANTPUB
3661 @itemx GPGME_CREATE_WANTSEC
3662 Return the public or secret key as part of the result structure.
3663 This has not yet been implemented.
3664
3665 @item GPGME_CREATE_FORCE
3666 The engine does not allow the creation of a key with a user ID
3667 already existing in the local key database.  This flag can be used to
3668 override this check.
3669
3670 @item GPGME_CREATE_NOEXPIRE
3671 Request generation of keys that do not expire.
3672
3673 @end table
3674
3675 After the operation completed successfully, information about the
3676 created key can be retrieved with @code{gpgme_op_genkey_result}.
3677
3678 The function returns zero on success, @code{GPG_ERR_NOT_SUPPORTED} if
3679 the engine does not support the command, or a bunch of other error
3680 codes.
3681
3682 @end deftypefun
3683
3684
3685 @deftypefun gpgme_error_t gpgme_op_createkey_start @
3686       (@w{gpgme_ctx_t @var{ctx}}, @
3687        @w{const char *@var{userid}}, @
3688        @w{const char *@var{algo}}, @
3689        @w{unsigned long @var{reserved}}, @
3690        @w{unsigned long @var{expires}}, @
3691        @w{gpgme_key_t @var{extrakey}}, @
3692        @w{unsigned int @var{flags}});
3693
3694 The function @code{gpgme_op_createkey_start} initiates a
3695 @code{gpgme_op_createkey} operation; see there for details.  It must
3696 be completed by calling @code{gpgme_wait} on the context.
3697 @xref{Waiting For Completion}.
3698
3699 @end deftypefun
3700
3701 @c
3702 @c  gpgme_op_createsubkey
3703 @c
3704 @deftypefun gpgme_error_t gpgme_op_createsubkey @
3705       (@w{gpgme_ctx_t @var{ctx}}, @
3706        @w{gpgme_key_t @var{key}}, @
3707        @w{const char *@var{algo}}, @
3708        @w{unsigned long @var{reserved}}, @
3709        @w{unsigned long @var{expires}}, @
3710        @w{unsigned int @var{flags}});
3711
3712 The function @code{gpgme_op_createsubkey} creates and adds a new
3713 subkey to the primary OpenPGP key given by @var{KEY}.  The only
3714 allowed protocol in @var{ctx} is @code{GPGME_PROTOCOL_OPENPGP}.
3715 Subkeys (aka secondary keys) are a concept in the OpenPGP protocol to
3716 bind several keys to a primary key.  As of now this function requires
3717 at least version 2.1.13 of GnuPG.
3718
3719 @var{key} specifies the key to operate on.
3720
3721 @var{algo} specifies the algorithm for the new subkey.  For a list of
3722 supported algorithms, see the GnuPG manual.  If @var{algo} is
3723 @code{NULL} or the string "default", the subkey is generated using the
3724 default algorithm for an encryption subkey of the engine.  If the
3725 string "future-default" is used the engine may use an encryption
3726 algorithm which is planned to be the default in a future release of
3727 the engine; however existing implementation of the protocol may not be
3728 able to already handle such future algorithms.
3729
3730 @var{reserved} must be set to zero.
3731
3732 @var{expires} specifies the expiration time in seconds.  If you supply
3733 0, a reasonable expiration time is chosen.  Use the flag
3734 @code{GPGME_CREATE_NOEXPIRE} to create keys that do not expire.  Note
3735 that this parameter takes an unsigned long value and not a
3736 @code{time_t} to avoid problems on systems which use a signed 32 bit
3737 @code{time_t}.  Note further that the OpenPGP protocol uses 32 bit
3738 values for timestamps and thus can only encode dates up to the year
3739 2106.
3740
3741 @var{flags} takes the same values as described above for
3742 @code{gpgme_op_createkey}.
3743
3744 After the operation completed successfully, information about the
3745 created key can be retrieved with @code{gpgme_op_genkey_result}.
3746
3747 The function returns zero on success, @code{GPG_ERR_NOT_SUPPORTED} if
3748 the engine does not support the command, or a bunch of other error
3749 codes.
3750
3751
3752 @end deftypefun
3753
3754 @deftypefun gpgme_error_t gpgme_op_createsubkey_start @
3755       (@w{gpgme_ctx_t @var{ctx}}, @
3756        @w{gpgme_key_t @var{key}}, @
3757        @w{const char *@var{algo}}, @
3758        @w{unsigned long @var{reserved}}, @
3759        @w{unsigned long @var{expires}}, @
3760        @w{unsigned int @var{flags}});
3761
3762 The function @code{gpgme_op_createsubkey_start} initiates a
3763 @code{gpgme_op_createsubkey} operation; see there for details.  It must
3764 be completed by calling @code{gpgme_wait} on the context.
3765 @xref{Waiting For Completion}.
3766
3767 @end deftypefun
3768
3769
3770 @c
3771 @c  gpgme_op_adduid
3772 @c
3773 @deftypefun gpgme_error_t gpgme_op_adduid @
3774       (@w{gpgme_ctx_t @var{ctx}}, @
3775        @w{gpgme_key_t @var{key}}, @
3776        @w{const char *@var{userid}}, @
3777        @w{unsigned int @var{flags}});
3778
3779 The function @code{gpgme_op_adduid} adds a new user ID to the OpenPGP
3780 key given by @var{KEY}.  Adding additional user IDs after key creation
3781 is a feature of the OpenPGP protocol and thus the protocol for the
3782 context @var{ctx} must be set to OpenPGP.  As of now this function
3783 requires at least version 2.1.13 of GnuPG.
3784
3785 @var{key} specifies the key to operate on.
3786
3787 @var{userid} is the user ID to add to the key.  A user ID is commonly
3788 the mail address to be associated with the key.  GPGME does not
3789 require a specificy syntax but if more than a mail address is given,
3790 RFC-822 style format is suggested.  The value is expected to be in
3791 UTF-8 encoding (i.e. no IDN encoding for mail addresses).  This is a
3792 required parameter.
3793
3794 @var{flags} are currently not used and must be set to zero.
3795
3796 The function returns zero on success, @code{GPG_ERR_NOT_SUPPORTED} if
3797 the engine does not support the command, or a bunch of other error
3798 codes.
3799
3800 @end deftypefun
3801
3802 @deftypefun gpgme_error_t gpgme_op_adduid_start @
3803       (@w{gpgme_ctx_t @var{ctx}}, @
3804        @w{gpgme_key_t @var{key}}, @
3805        @w{const char *@var{userid}}, @
3806        @w{unsigned int @var{flags}});
3807
3808 The function @code{gpgme_op_adduid_start} initiates a
3809 @code{gpgme_op_adduid} operation; see there for details.  It must
3810 be completed by calling @code{gpgme_wait} on the context.
3811 @xref{Waiting For Completion}.
3812
3813 @end deftypefun
3814
3815
3816 @c
3817 @c  gpgme_op_revuid
3818 @c
3819 @deftypefun gpgme_error_t gpgme_op_revuid @
3820       (@w{gpgme_ctx_t @var{ctx}}, @
3821        @w{gpgme_key_t @var{key}}, @
3822        @w{const char *@var{userid}}, @
3823        @w{unsigned int @var{flags}});
3824
3825 The function @code{gpgme_op_revuid} revokes a user ID from the OpenPGP
3826 key given by @var{KEY}.  Revoking user IDs after key creation is a
3827 feature of the OpenPGP protocol and thus the protocol for the context
3828 @var{ctx} must be set to OpenPGP.  As of now this function requires at
3829 least version 2.1.13 of GnuPG.
3830
3831 @var{key} specifies the key to operate on.
3832
3833 @var{userid} is the user ID to be revoked from the key.  The user ID
3834 must be given verbatim because the engine does an exact and case
3835 sensitive match.  Thus the @code{uid} field from the user ID object
3836 (@code{gpgme_user_id_t}) is to be used.  This is a required parameter.
3837
3838 @var{flags} are currently not used and must be set to zero.
3839
3840 Note that the engine won't allow to revoke the last valid user ID.  To
3841 change a user ID is better to first add the new user ID, then revoke
3842 the old one, and finally publish the key.
3843
3844 The function returns zero on success, @code{GPG_ERR_NOT_SUPPORTED} if
3845 the engine does not support the command, or a bunch of other error
3846 codes.
3847
3848 @end deftypefun
3849
3850 @deftypefun gpgme_error_t gpgme_op_revuid_start @
3851       (@w{gpgme_ctx_t @var{ctx}}, @
3852        @w{gpgme_key_t @var{key}}, @
3853        @w{const char *@var{userid}}, @
3854        @w{unsigned int @var{flags}});
3855
3856 The function @code{gpgme_op_revuid_start} initiates a
3857 @code{gpgme_op_revuid} operation; see there for details.  It must
3858 be completed by calling @code{gpgme_wait} on the context.
3859 @xref{Waiting For Completion}.
3860
3861 @end deftypefun
3862
3863
3864 @c
3865 @c  gpgme_op_genkey
3866 @c
3867 @deftypefun gpgme_error_t gpgme_op_genkey @
3868       (@w{gpgme_ctx_t @var{ctx}}, @
3869        @w{const char *@var{parms}}, @
3870        @w{gpgme_data_t @var{public}}, @
3871        @w{gpgme_data_t @var{secret}})
3872
3873 The function @code{gpgme_op_genkey} generates a new key pair in the
3874 context @var{ctx}.  The meaning of @var{public} and @var{secret}
3875 depends on the crypto backend.
3876
3877 GPG does not support @var{public} and @var{secret}, they should be
3878 @code{NULL}.  GnuPG will generate a key pair and add it to the
3879 standard key ring.  The fingerprint of the generated key is available
3880 with @code{gpgme_op_genkey_result}.
3881
3882 GpgSM requires @var{public} to be a writable data object.  GpgSM will
3883 generate a secret key (which will be stored by @command{gpg-agent},
3884 and return a certificate request in @var{public}, which then needs to
3885 be signed by the certification authority and imported before it can be
3886 used.  GpgSM does not make the fingerprint available.
3887
3888 The argument @var{parms} specifies parameters for the key in an string
3889 that looks something like XML.  The details about the format of
3890 @var{parms} are specific to the crypto engine used by @var{ctx}.  The
3891 first line of the parameters must be @code{<GnupgKeyParams
3892 format="internal">} and the last line must be
3893 @code{</GnupgKeyParams>}.  Every line in between the first and last
3894 lines is treated as a Header: Value pair.  In particular, no XML
3895 escaping is necessary if you need to include the characters @code{<},
3896 @code{>}, or @code{&}.
3897
3898 Here is an example for GnuPG as the crypto engine (all parameters of
3899 OpenPGP key generation are documented in the GPG manual):
3900
3901 @example
3902 <GnupgKeyParms format="internal">
3903 Key-Type: default
3904 Subkey-Type: default
3905 Name-Real: Joe Tester
3906 Name-Comment: with stupid passphrase
3907 Name-Email: joe@@foo.bar
3908 Expire-Date: 0
3909 Passphrase: abc
3910 </GnupgKeyParms>
3911 @end example
3912
3913 Here is an example for GpgSM as the crypto engine (all parameters of
3914 OpenPGP key generation are documented in the GPGSM manual):
3915
3916 @example
3917 <GnupgKeyParms format="internal">
3918 Key-Type: RSA
3919 Key-Length: 1024
3920 Name-DN: C=de,O=g10 code,OU=Testlab,CN=Joe 2 Tester
3921 Name-Email: joe@@foo.bar
3922 </GnupgKeyParms>
3923 @end example
3924
3925 Strings should be given in UTF-8 encoding.  The only format supported
3926 for now is ``internal''.  The content of the @code{GnupgKeyParms}
3927 container is passed verbatim to the crypto backend.  Control
3928 statements are not allowed.
3929
3930 After the operation completed successfully, the result can be
3931 retrieved with @code{gpgme_op_genkey_result}.
3932
3933 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
3934 operation could be started successfully, @code{GPG_ERR_INV_VALUE} if
3935 @var{parms} is not a well-formed string (e.g. does not have the
3936 expected tag-like headers and footers), @code{GPG_ERR_NOT_SUPPORTED}
3937 if @var{public} or @var{secret} is not valid, and
3938 @code{GPG_ERR_GENERAL} if no key was created by the backend.
3939 @end deftypefun
3940
3941 @deftypefun gpgme_error_t gpgme_op_genkey_start (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{parms}}, @w{gpgme_data_t @var{public}}, @w{gpgme_data_t @var{secret}})
3942
3943 The function @code{gpgme_op_genkey_start} initiates a
3944 @code{gpgme_op_genkey} operation.  It can be completed by calling
3945 @code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
3946
3947 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
3948 operation could be started successfully, @code{GPG_ERR_INV_VALUE} if
3949 @var{parms} is not a valid XML string, and
3950 @code{GPG_ERR_NOT_SUPPORTED} if @var{public} or @var{secret} is not
3951 @code{NULL}.
3952 @end deftypefun
3953
3954
3955 @c
3956 @c  gpgme_op_genkey_result
3957 @c
3958 @deftp {Data type} {gpgme_genkey_result_t}
3959
3960 This is a pointer to a structure used to store the result of a
3961 @code{gpgme_op_genkey} operation.  After successfully generating a
3962 key, you can retrieve the pointer to the result with
3963 @code{gpgme_op_genkey_result}.  The structure contains the following
3964 members:
3965
3966 @table @code
3967 @item unsigned int primary : 1
3968 This flag is set to 1 if a primary key was created and to 0
3969 if not.
3970
3971 @item unsigned int sub : 1
3972 This flag is set to 1 if a subkey was created and to 0 if not.
3973
3974 @item unsigned int uid : 1
3975 This flag is set to 1 if a user ID was created and to 0 if not.
3976
3977 @item char *fpr
3978 This is the fingerprint of the key that was created.  If both a
3979 primary and a subkey were generated, the fingerprint of the primary
3980 key will be returned.  If the crypto engine does not provide the
3981 fingerprint, @code{fpr} will be a null pointer.
3982
3983 @item gpgme_data_t pubkey
3984 This will eventually be used to return the public key.  It is
3985 currently not used.
3986
3987 @item gpgme_data_t seckey
3988 This will eventually be used to return the secret key.  It is
3989 currently not used.
3990
3991 @end table
3992 @end deftp
3993
3994 @deftypefun gpgme_genkey_result_t gpgme_op_genkey_result (@w{gpgme_ctx_t @var{ctx}})
3995
3996 The function @code{gpgme_op_genkey_result} returns a
3997 @code{gpgme_genkey_result_t} pointer to a structure holding the result of
3998 a @code{gpgme_op_genkey} operation.  The pointer is only valid if the
3999 last operation on the context was a @code{gpgme_op_genkey} or
4000 @code{gpgme_op_genkey_start} operation, and if this operation finished
4001 successfully.  The returned pointer is only valid until the next
4002 operation is started on the context.
4003
4004 @end deftypefun
4005
4006
4007 @c
4008 @c  SIGNING KEYS
4009 @c
4010 @node Signing Keys
4011 @subsection Signing Keys
4012 @cindex key, signing
4013
4014 Key signatures are a unique concept of the OpenPGP protocol.  They can
4015 be used to certify the validity of a key and are used to create the
4016 Web-of-Trust (WoT).  Instead of using the @code{gpgme_op_interact}
4017 function along with a finite state machine, GPGME provides a
4018 convenient function to create key signatures when using modern GnuPG
4019 versions.
4020
4021
4022 @c
4023 @c  gpgme_op_keysign
4024 @c
4025 @deftypefun gpgme_error_t gpgme_op_keysign @
4026       (@w{gpgme_ctx_t @var{ctx}}, @
4027        @w{gpgme_key_t @var{key}}, @
4028        @w{const char *@var{userid}}, @
4029        @w{unsigned long @var{expires}}, @
4030        @w{unsigned int @var{flags}});
4031
4032 The function @code{gpgme_op_keysign} adds a new key signature to the
4033 public key @var{KEY}.   This function requires at least version 2.1.12 of
4034 GnuPG.
4035
4036 @var{CTX} is the usual context which describes the protocol to use
4037 (which must be OpenPGP) and has also the list of signer keys to be
4038 used for the signature.  The common case is to use the default key for
4039 signing other keys.  If another key or more than one key shall be used
4040 for a key signature, @code{gpgme_signers_add} can be used.
4041 @xref{Selecting Signers}.
4042
4043 @var{key} specifies the key to operate on.
4044
4045 @var{userid} selects the user ID or user IDs to be signed.  If
4046 @var{userid} is set to @code{NULL} all valid user IDs are signed.  The
4047 user ID must be given verbatim because the engine does an exact and
4048 case sensitive match.  Thus the @code{uid} field from the user ID
4049 object (@code{gpgme_user_id_t}) is to be used.  To select more than
4050 one user ID put them all into one string separated by linefeeds
4051 characters (@code{\n}) and set the flag @code{GPGME_KEYSIGN_LFSEP}.
4052
4053 @var{expires} specifies the expiration time of the new signature in
4054 seconds.  The common case is to use 0 to not set an expiration date.
4055 However, if the configuration of the engine defines a default
4056 expiration for key signatures, that is still used unless the flag
4057 @code{GPGME_KEYSIGN_NOEXPIRE} is used.  Note that this parameter takes
4058 an unsigned long value and not a @code{time_t} to avoid problems on
4059 systems which use a signed 32 bit @code{time_t}.  Note further that
4060 the OpenPGP protocol uses 32 bit values for timestamps and thus can
4061 only encode dates up to the year 2106.
4062
4063 @var{flags} can be set to the bit-wise OR of the following flags:
4064
4065 @table @code
4066 @item GPGME_KEYSIGN_LOCAL
4067 Instead of creating an exportable key signature, create a key
4068 signature which is is marked as non-exportable.
4069
4070 @item GPGME_KEYSIGN_LFSEP
4071 Although linefeeds are uncommon in user IDs this flag is required to
4072 explicitly declare that @var{userid} may contain several linefeed
4073 separated user IDs.
4074
4075 @item GPGME_KEYSIGN_NOEXPIRE
4076 Force the creation of a key signature without an expiration date.  This
4077 overrides @var{expire} and any local configuration of the engine.
4078
4079 @end table
4080
4081 The function returns zero on success, @code{GPG_ERR_NOT_SUPPORTED} if
4082 the engine does not support the command, or a bunch of other error
4083 codes.
4084
4085 @end deftypefun
4086
4087
4088 @deftypefun gpgme_error_t gpgme_op_keysign_start @
4089       (@w{gpgme_ctx_t @var{ctx}}, @
4090        @w{gpgme_key_t @var{key}}, @
4091        @w{const char *@var{userid}}, @
4092        @w{unsigned long @var{expires}}, @
4093        @w{unsigned int @var{flags}});
4094
4095 The function @code{gpgme_op_keysign_start} initiates a
4096 @code{gpgme_op_keysign} operation; see there for details.  It must
4097 be completed by calling @code{gpgme_wait} on the context.
4098 @xref{Waiting For Completion}.
4099
4100 @end deftypefun
4101
4102
4103 @c
4104 @c  EXPORTING KEYS
4105 @c
4106 @node Exporting Keys
4107 @subsection Exporting Keys
4108 @cindex key, export
4109 @cindex key ring, export from
4110
4111 Exporting keys means the same as running @command{gpg} with the command
4112 @option{--export}.  However, a mode flag can be used to change the way
4113 the export works.  The available mode flags are described below, they
4114 may be or-ed together.
4115
4116 @table @code
4117
4118 @item GPGME_EXPORT_MODE_EXTERN
4119 If this bit is set, the output is send directly to the default
4120 keyserver. This is currently only allowed for OpenPGP keys.  It is good
4121 practise to not send more than a few dozens key to a keyserver at one
4122 time.  Using this flag requires that the @var{keydata} argument of the
4123 export function is set to @code{NULL}.
4124
4125 @item GPGME_EXPORT_MODE_MINIMAL
4126 If this bit is set, the smallest possible key is exported.  For OpenPGP
4127 keys it removes all signatures except for the latest self-signatures.
4128 For X.509 keys it has no effect.
4129
4130
4131 @item GPGME_EXPORT_MODE_SECRET
4132 Instead of exporting the public key, the secret key is exported.  This
4133 may not be combined with @code{GPGME_EXPORT_MODE_EXTERN}.  For X.509
4134 the export format is PKCS#8.
4135
4136 @item GPGME_EXPORT_MODE_RAW
4137 If this flag is used with @code{GPGME_EXPORT_MODE_SECRET} for an X.509
4138 key the export format will be changed to PKCS#1.  This flag may not be
4139 used with OpenPGP.
4140
4141 @item GPGME_EXPORT_MODE_PKCS12
4142 If this flag is used with @code{GPGME_EXPORT_MODE_SECRET} for an X.509
4143 key the export format will be changed to PKCS#12 which also includes
4144 the certificate.  This flag may not be used with OpenPGP.
4145
4146 @end table
4147
4148
4149
4150 @deftypefun gpgme_error_t gpgme_op_export (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}}, @w{gpgme_export_mode_t @var{mode}}, @w{gpgme_data_t @var{keydata}})
4151 The function @code{gpgme_op_export} extracts public keys and returns
4152 them in the data buffer @var{keydata}.  The output format of the key
4153 data returned is determined by the @acronym{ASCII} armor attribute set
4154 for the context @var{ctx}, or, if that is not set, by the encoding
4155 specified for @var{keydata}.
4156
4157 If @var{pattern} is @code{NULL}, all available keys are returned.
4158 Otherwise, @var{pattern} contains an engine specific expression that
4159 is used to limit the list to all keys matching the pattern.
4160
4161 @var{mode} is usually 0; other values are described above.
4162
4163 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4164 operation completed successfully, @code{GPG_ERR_INV_VALUE} if
4165 @var{keydata} is not a valid empty data buffer, and passes through any
4166 errors that are reported by the crypto engine support routines.
4167 @end deftypefun
4168
4169 @deftypefun gpgme_error_t gpgme_op_export_start (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}}, @w{gpgme_export_mode_t @var{mode}}, @w{gpgme_data_t @var{keydata}})
4170 The function @code{gpgme_op_export_start} initiates a
4171 @code{gpgme_op_export} operation.  It can be completed by calling
4172 @code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
4173
4174 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4175 operation could be started successfully, and @code{GPG_ERR_INV_VALUE}
4176 if @var{keydata} is not a valid empty data buffer.
4177 @end deftypefun
4178
4179 @deftypefun gpgme_error_t gpgme_op_export_ext (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}[]}, @w{gpgme_export_mode_t @var{mode}}, @w{gpgme_data_t @var{keydata}})
4180 The function @code{gpgme_op_export} extracts public keys and returns
4181 them in the data buffer @var{keydata}.  The output format of the key
4182 data returned is determined by the @acronym{ASCII} armor attribute set
4183 for the context @var{ctx}, or, if that is not set, by the encoding
4184 specified for @var{keydata}.
4185
4186 If @var{pattern} or @var{*pattern} is @code{NULL}, all available keys
4187 are returned.  Otherwise, @var{pattern} is a @code{NULL} terminated
4188 array of strings that are used to limit the list to all keys matching
4189 at least one of the patterns verbatim.
4190
4191 @var{mode} is usually 0; other values are described above.
4192
4193 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4194 operation completed successfully, @code{GPG_ERR_INV_VALUE} if
4195 @var{keydata} is not a valid empty data buffer, and passes through any
4196 errors that are reported by the crypto engine support routines.
4197 @end deftypefun
4198
4199 @deftypefun gpgme_error_t gpgme_op_export_ext_start (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}[]}, @w{gpgme_export_mode_t @var{mode}}, @w{gpgme_data_t @var{keydata}})
4200 The function @code{gpgme_op_export_ext_start} initiates a
4201 @code{gpgme_op_export_ext} operation.  It can be completed by calling
4202 @code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
4203
4204 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4205 operation could be started successfully, and @code{GPG_ERR_INV_VALUE}
4206 if @var{keydata} is not a valid empty data buffer.
4207 @end deftypefun
4208
4209
4210 @deftypefun gpgme_error_t gpgme_op_export_keys (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t keys[]}, @w{gpgme_export_mode_t @var{mode}}, @w{gpgme_data_t @var{keydata}})
4211 The function @code{gpgme_op_export_keys} extracts public keys and returns
4212 them in the data buffer @var{keydata}.  The output format of the key
4213 data returned is determined by the @acronym{ASCII} armor attribute set
4214 for the context @var{ctx}, or, if that is not set, by the encoding
4215 specified for @var{keydata}.
4216
4217 The keys to export are taken form the @code{NULL} terminated array
4218 @var{keys}.  Only keys of the currently selected protocol of
4219 @var{ctx} which do have a fingerprint set are considered for export.
4220 Other keys specified by the @var{keys} are ignored.  In particular
4221 OpenPGP keys retrieved via an external key listing are not included.
4222
4223 @var{mode} is usually 0; other values are described above.
4224
4225 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4226 operation completed successfully, @code{GPG_ERR_INV_VALUE} if
4227 @var{keydata} is not a valid empty data buffer, @code{GPG_ERR_NO_DATA}
4228 if no useful keys are in @var{keys} and passes through any errors that
4229 are reported by the crypto engine support routines.
4230 @end deftypefun
4231
4232 @deftypefun gpgme_error_t gpgme_op_export_keys_start (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t @var{keys}[]}, @w{gpgme_export_mode_t @var{mode}}, @w{gpgme_data_t @var{keydata}})
4233 The function @code{gpgme_op_export_keys_start} initiates a
4234 @code{gpgme_op_export_ext} operation.  It can be completed by calling
4235 @code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
4236
4237 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4238 operation could be started successfully, and @code{GPG_ERR_INV_VALUE}
4239 if @var{keydata} is not a valid empty data buffer, @code{GPG_ERR_NO_DATA}
4240 if no useful keys are in @var{keys} and passes through any errors that
4241 are reported by the crypto engine support routines.
4242 @end deftypefun
4243
4244
4245 @node Importing Keys
4246 @subsection Importing Keys
4247 @cindex key, import
4248 @cindex key ring, import to
4249
4250 Importing keys means the same as running @command{gpg} with the command
4251 @option{--import}.
4252
4253
4254 @deftypefun gpgme_error_t gpgme_op_import (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{keydata}})
4255 The function @code{gpgme_op_import} adds the keys in the data buffer
4256 @var{keydata} to the key ring of the crypto engine used by @var{ctx}.
4257 The format of @var{keydata} can be @acronym{ASCII} armored, for example,
4258 but the details are specific to the crypto engine.
4259
4260 After the operation completed successfully, the result can be
4261 retrieved with @code{gpgme_op_import_result}.
4262
4263 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4264 import was completed successfully, @code{GPG_ERR_INV_VALUE} if
4265 @var{keydata} if @var{ctx} or @var{keydata} is not a valid pointer,
4266 and @code{GPG_ERR_NO_DATA} if @var{keydata} is an empty data buffer.
4267 @end deftypefun
4268
4269 @deftypefun gpgme_error_t gpgme_op_import_start (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{keydata}})
4270 The function @code{gpgme_op_import_start} initiates a
4271 @code{gpgme_op_import} operation.  It can be completed by calling
4272 @code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
4273
4274 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4275 import could be started successfully, @code{GPG_ERR_INV_VALUE} if
4276 @var{keydata} if @var{ctx} or @var{keydata} is not a valid pointer,
4277 and @code{GPG_ERR_NO_DATA} if @var{keydata} is an empty data buffer.
4278 @end deftypefun
4279
4280 @deftypefun gpgme_error_t gpgme_op_import_keys (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t *@var{keys}})
4281 The function @code{gpgme_op_import_keys} adds the keys described by the
4282 @code{NULL} terminated array @var{keys} to the key ring of the crypto
4283 engine used by @var{ctx}.  This function is the general interface to
4284 move a key from one crypto engine to another as long as they are
4285 compatible.  In particular it is used to actually import and make keys
4286 permanent which have been retrieved from an external source (i.e. using
4287 @code{GPGME_KEYLIST_MODE_EXTERN}).  @footnote{Thus it is a replacement
4288 for the usual workaround of exporting and then importing a key to make
4289 an X.509 key permanent.}
4290
4291 Only keys of the currently selected protocol of @var{ctx} are
4292 considered for import.  Other keys specified by the @var{keys} are
4293 ignored.  As of now all considered keys must have been retrieved using
4294 the same method, that is the used key listing mode must be identical.
4295
4296 After the operation completed successfully, the result can be
4297 retrieved with @code{gpgme_op_import_result}.
4298
4299 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4300 import was completed successfully, @code{GPG_ERR_INV_VALUE} if
4301 @var{keydata} if @var{ctx} or @var{keydata} is not a valid pointer,
4302 @code{GPG_ERR_CONFLICT} if the key listing mode does not match, and
4303 @code{GPG_ERR_NO_DATA} if no keys are considered for export.
4304 @end deftypefun
4305
4306 @deftypefun gpgme_error_t gpgme_op_import_keys_start (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t *@var{keys}})
4307 The function @code{gpgme_op_import_keys_start} initiates a
4308 @code{gpgme_op_import_keys} operation.  It can be completed by calling
4309 @code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
4310
4311 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4312 import was completed successfully, @code{GPG_ERR_INV_VALUE} if
4313 @var{keydata} if @var{ctx} or @var{keydata} is not a valid pointer,
4314 @code{GPG_ERR_CONFLICT} if the key listing mode does not match, and
4315 @code{GPG_ERR_NO_DATA} if no keys are considered for export.
4316 @end deftypefun
4317
4318 @deftp {Data type} {gpgme_import_status_t}
4319 This is a pointer to a structure used to store a part of the result of
4320 a @code{gpgme_op_import} operation.  For each considered key one
4321 status is added that contains information about the result of the
4322 import.  The structure contains the following members:
4323
4324 @table @code
4325 @item gpgme_import_status_t next
4326 This is a pointer to the next status structure in the linked list, or
4327 @code{NULL} if this is the last element.
4328
4329 @item char *fpr
4330 This is the fingerprint of the key that was considered.
4331
4332 @item gpgme_error_t result
4333 If the import was not successful, this is the error value that caused
4334 the import to fail.  Otherwise the error code is
4335 @code{GPG_ERR_NO_ERROR}.
4336
4337 @item unsigned int status
4338 This is a bit-wise OR of the following flags that give more
4339 information about what part of the key was imported.  If the key was
4340 already known, this might be 0.
4341
4342 @table @code
4343 @item GPGME_IMPORT_NEW
4344 The key was new.
4345
4346 @item GPGME_IMPORT_UID
4347 The key contained new user IDs.
4348
4349 @item GPGME_IMPORT_SIG
4350 The key contained new signatures.
4351
4352 @item GPGME_IMPORT_SUBKEY
4353 The key contained new sub keys.
4354
4355 @item GPGME_IMPORT_SECRET
4356 The key contained a secret key.
4357 @end table
4358 @end table