doc: s/Multi Threading/Multi-Threading/
[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
35   @sc{c:} @c
36 @end macro
37 @macro srvr
38   @sc{s:} @c
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.  The
2317 following interfaces make it possible to detach a result structure
2318 from its associated context and give it a lifetime beyond that of the
2319 current operation or context.
2320
2321 @deftypefun void gpgme_result_ref (@w{void *@var{result}})
2322 The function @code{gpgme_result_ref} acquires an additional reference
2323 for the result @var{result}, which may be of any type
2324 @code{gpgme_*_result_t}.  As long as the user holds a reference, the
2325 result structure is guaranteed to be valid and unmodified.
2326 @end deftypefun
2327
2328 @deftypefun void gpgme_result_unref (@w{void *@var{result}})
2329 The function @code{gpgme_result_unref} releases a reference for the
2330 result @var{result}.  If this was the last reference, the result
2331 structure will be destroyed and all resources associated to it will be
2332 released.
2333 @end deftypefun
2334
2335 Note that a context may hold its own references to result structures,
2336 typically until the context is destroyed or the next operation is
2337 started.  In fact, these references are accessed through the
2338 @code{gpgme_op_*_result} functions.
2339
2340
2341 @node Context Attributes
2342 @section Context Attributes
2343 @cindex context, attributes
2344
2345 @menu
2346 * Protocol Selection::            Selecting the protocol used by a context.
2347 * Crypto Engine::                 Configuring the crypto engine.
2348 * Setting the Sender::            How to tell the engine the sender.
2349 * ASCII Armor::                   Requesting @acronym{ASCII} armored output.
2350 * Text Mode::                     Choosing canonical text mode.
2351 * Offline Mode::                  Choosing offline mode.
2352 * Pinentry Mode::                 Choosing the pinentry mode.
2353 * Included Certificates::         Including a number of certificates.
2354 * Key Listing Mode::              Selecting key listing mode.
2355 * Passphrase Callback::           Getting the passphrase from the user.
2356 * Progress Meter Callback::       Being informed about the progress.
2357 * Status Message Callback::       Status messages received from gpg.
2358 * Locale::                        Setting the locale of a context.
2359 @end menu
2360
2361
2362 @node Protocol Selection
2363 @subsection Protocol Selection
2364 @cindex context, selecting protocol
2365 @cindex protocol, selecting
2366
2367 @deftypefun gpgme_error_t gpgme_set_protocol (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_protocol_t @var{proto}})
2368 The function @code{gpgme_set_protocol} sets the protocol used within
2369 the context @var{ctx} to @var{proto}.  All crypto operations will be
2370 performed by the crypto engine configured for that protocol.
2371 @xref{Protocols and Engines}.
2372
2373 Setting the protocol with @code{gpgme_set_protocol} does not check if
2374 the crypto engine for that protocol is available and installed
2375 correctly.  @xref{Engine Version Check}.
2376
2377 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
2378 protocol could be set successfully, and @code{GPG_ERR_INV_VALUE} if
2379 @var{protocol} is not a valid protocol.
2380 @end deftypefun
2381
2382 @deftypefun gpgme_protocol_t gpgme_get_protocol (@w{gpgme_ctx_t @var{ctx}})
2383 The function @code{gpgme_get_protocol} retrieves the protocol currently
2384 use with the context @var{ctx}.
2385 @end deftypefun
2386
2387
2388 @node Crypto Engine
2389 @subsection Crypto Engine
2390 @cindex context, configuring engine
2391 @cindex engine, configuration per context
2392
2393 The following functions can be used to set and retrieve the
2394 configuration of the crypto engines of a specific context.  The
2395 default can also be retrieved without any particular context.
2396 @xref{Engine Information}.  The default can also be changed globally.
2397 @xref{Engine Configuration}.
2398
2399 @deftypefun gpgme_engine_info_t gpgme_ctx_get_engine_info (@w{gpgme_ctx_t @var{ctx}})
2400 The function @code{gpgme_ctx_get_engine_info} returns a linked list of
2401 engine info structures.  Each info structure describes the
2402 configuration of one configured backend, as used by the context
2403 @var{ctx}.
2404
2405 The result is valid until the next invocation of
2406 @code{gpgme_ctx_set_engine_info} for this particular context.
2407
2408 This function can not fail.
2409 @end deftypefun
2410
2411 @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}})
2412 The function @code{gpgme_ctx_set_engine_info} changes the
2413 configuration of the crypto engine implementing the protocol
2414 @var{proto} for the context @var{ctx}.
2415
2416 @var{file_name} is the file name of the executable program
2417 implementing this protocol, and @var{home_dir} is the directory name
2418 of the configuration directory for this crypto engine.  If
2419 @var{home_dir} is @code{NULL}, the engine's default will be used.
2420
2421 Currently this function must be used before starting the first crypto
2422 operation.  It is unspecified if and when the changes will take effect
2423 if the function is called after starting the first operation on the
2424 context @var{ctx}.
2425
2426 This function returns the error code @code{GPG_ERR_NO_ERROR} if
2427 successful, or an eror code on failure.
2428 @end deftypefun
2429
2430
2431 @node Setting the Sender
2432 @subsection How to tell the engine the sender.
2433 @cindex context, sender
2434 @cindex sender
2435 @cindex From:
2436
2437 Some engines can make use of the sender’s address, for example to
2438 figure out the best user id in certain trust models.  For verification
2439 and signing of mails, it is thus suggested to let the engine know the
2440 sender ("From:") address.  @acronym{GPGME} provides two functions to
2441 accomplish that.  Note that the esoteric use of multiple "From:"
2442 addresses is not supported.
2443
2444 @deftypefun gpgme_error_t gpgme_set_sender @
2445       (@w{gpgme_ctx_t @var{ctx}}, @
2446        @w{int @var{address}})
2447
2448 The function @code{gpgme_set_sender} specifies the sender address for
2449 use in sign and verify operations.  @var{address} is expected to be
2450 the ``addr-spec'' part of an address but my also be a complete mailbox
2451 address, in which case this function extracts the ``addr-spec'' from
2452 it.  Using @code{NULL} for @var{address} clears the sender address.
2453
2454 The function returns 0 on success or an error code on failure.  The
2455 most likely failure is that no valid ``addr-spec'' was found in
2456 @var{address}.
2457
2458 @end deftypefun
2459
2460 @deftypefun @w{const char *} gpgme_get_sender @
2461       (@w{gpgme_ctx_t @var{ctx}})
2462
2463 The function @code{gpgme_get_sender} returns the current sender
2464 address from the context, or NULL if none was set.  The returned
2465 value is valid as long as the @var{ctx} is valid and
2466 @code{gpgme_set_sender} has not been called again.
2467
2468 @end deftypefun
2469
2470
2471
2472 @c FIXME: Unfortunately, using @acronym here breaks texi2dvi.
2473 @node ASCII Armor
2474 @subsection @acronym{ASCII} Armor
2475 @cindex context, armor mode
2476 @cindex @acronym{ASCII} armor
2477 @cindex armor mode
2478
2479 @deftypefun void gpgme_set_armor (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{yes}})
2480 The function @code{gpgme_set_armor} specifies if the output should be
2481 @acronym{ASCII} armored.  By default, output is not @acronym{ASCII}
2482 armored.
2483
2484 @acronym{ASCII} armored output is disabled if @var{yes} is zero, and
2485 enabled otherwise.
2486 @end deftypefun
2487
2488 @deftypefun int gpgme_get_armor (@w{gpgme_ctx_t @var{ctx}})
2489 The function @code{gpgme_get_armor} returns 1 if the output is
2490 @acronym{ASCII} armored, and @code{0} if it is not, or if @var{ctx} is
2491 not a valid pointer.
2492 @end deftypefun
2493
2494
2495 @node Text Mode
2496 @subsection Text Mode
2497 @cindex context, text mode
2498 @cindex text mode
2499 @cindex canonical text mode
2500
2501 @deftypefun void gpgme_set_textmode (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{yes}})
2502 The function @code{gpgme_set_textmode} specifies if canonical text mode
2503 should be used.  By default, text mode is not used.
2504
2505 Text mode is for example used for the RFC2015 signatures; note that
2506 the updated RFC 3156 mandates that the mail user agent does some
2507 preparations so that text mode is not needed anymore.
2508
2509 This option is only relevant to the OpenPGP crypto engine, and ignored
2510 by all other engines.
2511
2512 Canonical text mode is disabled if @var{yes} is zero, and enabled
2513 otherwise.
2514 @end deftypefun
2515
2516 @deftypefun int gpgme_get_textmode (@w{gpgme_ctx_t @var{ctx}})
2517 The function @code{gpgme_get_textmode} returns 1 if canonical text
2518 mode is enabled, and @code{0} if it is not, or if @var{ctx} is not a
2519 valid pointer.
2520 @end deftypefun
2521
2522
2523 @node Offline Mode
2524 @subsection Offline Mode
2525 @cindex context, offline mode
2526 @cindex offline mode
2527
2528 @deftypefun void gpgme_set_offline (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{yes}})
2529 The function @code{gpgme_set_offline} specifies if offline mode
2530 should be used.  By default, offline mode is not used.
2531
2532 The offline mode specifies if dirmngr should be used to do additional
2533 validation that might require connections to external services.
2534 (e.g. CRL / OCSP checks).
2535
2536 Offline mode only affects the keylist mode @code{GPGME_KEYLIST_MODE_VALIDATE}
2537 and is only relevant to the CMS crypto engine. Offline mode
2538 is ignored otherwise.
2539
2540 This option may be extended in the future to completely disable
2541 the use of dirmngr for any engine.
2542
2543 Offline mode is disabled if @var{yes} is zero, and enabled
2544 otherwise.
2545 @end deftypefun
2546
2547 @deftypefun int gpgme_get_offline (@w{gpgme_ctx_t @var{ctx}})
2548 The function @code{gpgme_get_offline} returns 1 if offline
2549 mode is enabled, and @code{0} if it is not, or if @var{ctx} is not a
2550 valid pointer.
2551 @end deftypefun
2552
2553
2554 @node Pinentry Mode
2555 @subsection Pinentry Mode
2556 @cindex context, pinentry mode
2557 @cindex pinentry mode
2558
2559 @deftypefun gpgme_error_t gpgme_set_pinentry_mode (@w{gpgme_ctx_t @var{ctx}},
2560 @w{gpgme_pinentry_mode_t @var{mode}})
2561 The function @code{gpgme_set_pinentry_mode} specifies the pinentry mode
2562 to be used.
2563
2564 For GnuPG >= 2.1 this option is required to be set to
2565 @code{GPGME_PINENTRY_MODE_LOOPBACK} to enable the passphrase callback
2566 mechanism in GPGME through @code{gpgme_set_passphrase_cb}.
2567 @end deftypefun
2568
2569 @deftypefun gpgme_pinentry_mode_t gpgme_get_pinentry_mode (@w{gpgme_ctx_t @var{ctx}})
2570 The function @code{gpgme_get_pinenty_mode} returns the
2571 mode set for the context.
2572 @end deftypefun
2573
2574 @deftp {Data type} {enum gpgme_pinentry_mode_t}
2575 @tindex gpgme_pinentry_mode_t
2576 The @code{gpgme_minentry_mode_t} type specifies the set of possible pinentry
2577 modes that are supported by @acronym{GPGME} if GnuPG >= 2.1 is used.
2578 The following modes are supported:
2579
2580 @table @code
2581 @item GPGME_PINENTRY_MODE_DEFAULT
2582 Use the default of the agent, which is ask.
2583
2584 @item GPGME_PINENTRY_MODE_ASK
2585 Force the use of the Pinentry.
2586
2587 @item GPGME_PINENTRY_MODE_CANCEL
2588 Emulate use of Pinentry's cancel button.
2589
2590 @item GPGME_PINENTRY_MODE_ERROR
2591 Return a Pinentry error @code{No Pinentry}.
2592
2593 @item GPGME_PINENTRY_MODE_LOOPBACK
2594 Redirect Pinentry queries to the caller.
2595 This enables the use of @code{gpgme_set_passphrase_cb} whis pinentry
2596 queries redirected to gpgme.
2597
2598 Note: This mode requires @code{allow-loopback-pinentry} to be enabled
2599 in the @file{gpg-agent.conf} or an agent started with that option.
2600
2601 @end table
2602 @end deftp
2603
2604
2605 @node Included Certificates
2606 @subsection Included Certificates
2607 @cindex certificates, included
2608
2609 @deftypefun void gpgme_set_include_certs (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{nr_of_certs}})
2610 The function @code{gpgme_set_include_certs} specifies how many
2611 certificates should be included in an S/MIME signed message.  By
2612 default, only the sender's certificate is included.  The possible
2613 values of @var{nr_of_certs} are:
2614
2615 @table @code
2616 @item GPGME_INCLUDE_CERTS_DEFAULT
2617 Fall back to the default of the crypto backend.  This is the default
2618 for GPGME.
2619 @item -2
2620 Include all certificates except the root certificate.
2621 @item -1
2622 Include all certificates.
2623 @item 0
2624 Include no certificates.
2625 @item 1
2626 Include the sender's certificate only.
2627 @item n
2628 Include the first n certificates of the certificates path, starting
2629 from the sender's certificate.  The number @code{n} must be positive.
2630 @end table
2631
2632 Values of @var{nr_of_certs} smaller than -2 are undefined.
2633
2634 This option is only relevant to the CMS crypto engine, and ignored by
2635 all other engines.
2636 @end deftypefun
2637
2638 @deftypefun int gpgme_get_include_certs (@w{gpgme_ctx_t @var{ctx}})
2639 The function @code{gpgme_get_include_certs} returns the number of
2640 certificates to include into an S/MIME signed message.
2641 @end deftypefun
2642
2643
2644 @node Key Listing Mode
2645 @subsection Key Listing Mode
2646 @cindex key listing mode
2647 @cindex key listing, mode of
2648
2649 @deftypefun gpgme_error_t gpgme_set_keylist_mode (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_keylist_mode_t @var{mode}})
2650 The function @code{gpgme_set_keylist_mode} changes the default
2651 behaviour of the key listing functions.  The value in @var{mode} is a
2652 bitwise-or combination of one or multiple of the following bit values:
2653
2654 @table @code
2655 @item GPGME_KEYLIST_MODE_LOCAL
2656 The @code{GPGME_KEYLIST_MODE_LOCAL} symbol specifies that the local
2657 keyring should be searched for keys in the keylisting operation.  This
2658 is the default.
2659
2660 @item GPGME_KEYLIST_MODE_EXTERN
2661 The @code{GPGME_KEYLIST_MODE_EXTERN} symbol specifies that an external
2662 source should be searched for keys in the keylisting operation.  The
2663 type of external source is dependant on the crypto engine used and
2664 whether it is combined with @code{GPGME_KEYLIST_MODE_LOCAL}.  For
2665 example, it can be a remote keyserver or LDAP certificate server.
2666
2667 @item GPGME_KEYLIST_MODE_SIGS
2668 The @code{GPGME_KEYLIST_MODE_SIGS} symbol specifies that the key
2669 signatures should be included in the listed keys.
2670
2671 @item GPGME_KEYLIST_MODE_SIG_NOTATIONS
2672 The @code{GPGME_KEYLIST_MODE_SIG_NOTATIONS} symbol specifies that the
2673 signature notations on key signatures should be included in the listed
2674 keys.  This only works if @code{GPGME_KEYLIST_MODE_SIGS} is also
2675 enabled.
2676
2677 @item GPGME_KEYLIST_MODE_WITH_TOFU
2678 The @code{GPGME_KEYLIST_MODE_WITH_TOFU} symbol specifies that
2679 information pertaining to the TOFU trust model should be included in
2680 the listed keys.
2681
2682 @item GPGME_KEYLIST_MODE_WITH_SECRET
2683 The @code{GPGME_KEYLIST_MODE_WITH_SECRET} returns information about
2684 the presence of a corresponding secret key in a public key listing.  A
2685 public key listing with this mode is slower than a standard listing
2686 but can be used instead of a second run to list the secret keys.  This
2687 is only supported for GnuPG versions >= 2.1.
2688
2689 @item GPGME_KEYLIST_MODE_EPHEMERAL
2690 The @code{GPGME_KEYLIST_MODE_EPHEMERAL} symbol specifies that keys
2691 flagged as ephemeral are included in the listing.
2692
2693 @item GPGME_KEYLIST_MODE_VALIDATE
2694 The @code{GPGME_KEYLIST_MODE_VALIDATE} symbol specifies that the
2695 backend should do key or certificate validation and not just get the
2696 validity information from an internal cache.  This might be an
2697 expensive operation and is in general not useful.  Currently only
2698 implemented for the S/MIME backend and ignored for other backends.
2699
2700 @end table
2701
2702 At least one of @code{GPGME_KEYLIST_MODE_LOCAL} and
2703 @code{GPGME_KEYLIST_MODE_EXTERN} must be specified.  For future binary
2704 compatibility, you should get the current mode with
2705 @code{gpgme_get_keylist_mode} and modify it by setting or clearing the
2706 appropriate bits, and then using that calculated value in the
2707 @code{gpgme_set_keylisting_mode} operation.  This will leave all other
2708 bits in the mode value intact (in particular those that are not used
2709 in the current version of the library).
2710
2711 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
2712 mode could be set correctly, and @code{GPG_ERR_INV_VALUE} if @var{ctx}
2713 is not a valid pointer or @var{mode} is not a valid mode.
2714 @end deftypefun
2715
2716
2717 @deftypefun gpgme_keylist_mode_t gpgme_get_keylist_mode (@w{gpgme_ctx_t @var{ctx}})
2718 The function @code{gpgme_get_keylist_mode} returns the current key
2719 listing mode of the context @var{ctx}.  This value can then be
2720 modified and used in a subsequent @code{gpgme_set_keylist_mode}
2721 operation to only affect the desired bits (and leave all others
2722 intact).
2723
2724 The function returns 0 if @var{ctx} is not a valid pointer, and the
2725 current mode otherwise.  Note that 0 is not a valid mode value.
2726 @end deftypefun
2727
2728
2729 @node Passphrase Callback
2730 @subsection Passphrase Callback
2731 @cindex callback, passphrase
2732 @cindex passphrase callback
2733
2734 @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}})}
2735 @tindex gpgme_passphrase_cb_t
2736 The @code{gpgme_passphrase_cb_t} type is the type of functions usable as
2737 passphrase callback function.
2738
2739 The argument @var{uid_hint} might contain a string that gives an
2740 indication for which user ID the passphrase is required.  If this is
2741 not available, or not applicable (in the case of symmetric encryption,
2742 for example), @var{uid_hint} will be @code{NULL}.
2743
2744 The argument @var{passphrase_info}, if not @code{NULL}, will give
2745 further information about the context in which the passphrase is
2746 required.  This information is engine and operation specific.
2747
2748 If this is the repeated attempt to get the passphrase, because
2749 previous attempts failed, then @var{prev_was_bad} is 1, otherwise it
2750 will be 0.
2751
2752 The user must write the passphrase, followed by a newline character,
2753 to the file descriptor @var{fd}.  The function @code{gpgme_io_writen}
2754 should be used for the write operation.  Note that if the user returns
2755 0 to indicate success, the user must at least write a newline
2756 character before returning from the callback.
2757
2758 If an error occurs, return the corresponding @code{gpgme_error_t}
2759 value.  You can use the error code @code{GPG_ERR_CANCELED} to abort
2760 the operation.  Otherwise, return @code{0}.
2761 @end deftp
2762
2763 @deftypefun void gpgme_set_passphrase_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_passphrase_cb_t @var{passfunc}}, @w{void *@var{hook_value}})
2764 The function @code{gpgme_set_passphrase_cb} sets the function that is
2765 used when a passphrase needs to be provided by the user to
2766 @var{passfunc}.  The function @var{passfunc} needs to implemented by
2767 the user, and whenever it is called, it is called with its first
2768 argument being @var{hook_value}.  By default, no passphrase callback
2769 function is set.
2770
2771 Not all crypto engines require this callback to retrieve the
2772 passphrase.  It is better if the engine retrieves the passphrase from
2773 a trusted agent (a daemon process), rather than having each user to
2774 implement their own passphrase query.  Some engines do not even
2775 support an external passphrase callback at all, in this case the error
2776 code @code{GPG_ERR_NOT_SUPPORTED} is returned.
2777
2778 For GnuPG >= 2.1 the pinentry mode has to be set to
2779 @code{GPGME_PINENTRY_MODE_LOOPBACK} to enable the passphrase callback.
2780 See @code{gpgme_set_pinentry_mode}.
2781
2782 The user can disable the use of a passphrase callback function by
2783 calling @code{gpgme_set_passphrase_cb} with @var{passfunc} being
2784 @code{NULL}.
2785 @end deftypefun
2786
2787 @deftypefun void gpgme_get_passphrase_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_passphrase_cb_t *@var{passfunc}}, @w{void **@var{hook_value}})
2788 The function @code{gpgme_get_passphrase_cb} returns the function that
2789 is used when a passphrase needs to be provided by the user in
2790 @var{*passfunc}, and the first argument for this function in
2791 @var{*hook_value}.  If no passphrase callback is set, or @var{ctx} is
2792 not a valid pointer, @code{NULL} is returned in both variables.
2793
2794 @var{passfunc} or @var{hook_value} can be @code{NULL}.  In this case,
2795 the corresponding value will not be returned.
2796 @end deftypefun
2797
2798
2799 @node Progress Meter Callback
2800 @subsection Progress Meter Callback
2801 @cindex callback, progress meter
2802 @cindex progress meter callback
2803
2804 @deftp {Data type} {void (*gpgme_progress_cb_t)(void *@var{hook}, const char *@var{what}, int @var{type}, int @var{current}, int @var{total})}
2805 @tindex gpgme_progress_cb_t
2806 The @code{gpgme_progress_cb_t} type is the type of functions usable as
2807 progress callback function.
2808
2809 The arguments are specific to the crypto engine.  More information
2810 about the progress information returned from the GnuPG engine can be
2811 found in the GnuPG source code in the file @file{doc/DETAILS} in the
2812 section PROGRESS.
2813 @end deftp
2814
2815 @deftypefun void gpgme_set_progress_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_progress_cb_t @var{progfunc}}, @w{void *@var{hook_value}})
2816 The function @code{gpgme_set_progress_cb} sets the function that is
2817 used when progress information about a cryptographic operation is
2818 available.  The function @var{progfunc} needs to implemented by the
2819 user, and whenever it is called, it is called with its first argument
2820 being @var{hook_value}.  By default, no progress callback function
2821 is set.
2822
2823 Setting a callback function allows an interactive program to display
2824 progress information about a long operation to the user.
2825
2826 The user can disable the use of a progress callback function by
2827 calling @code{gpgme_set_progress_cb} with @var{progfunc} being
2828 @code{NULL}.
2829 @end deftypefun
2830
2831 @deftypefun void gpgme_get_progress_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_progress_cb_t *@var{progfunc}}, @w{void **@var{hook_value}})
2832 The function @code{gpgme_get_progress_cb} returns the function that is
2833 used to inform the user about the progress made in @var{*progfunc},
2834 and the first argument for this function in @var{*hook_value}.  If no
2835 progress callback is set, or @var{ctx} is not a valid pointer,
2836 @code{NULL} is returned in both variables.
2837
2838 @var{progfunc} or @var{hook_value} can be @code{NULL}.  In this case,
2839 the corresponding value will not be returned.
2840 @end deftypefun
2841
2842
2843 @node Status Message Callback
2844 @subsection Status Message Callback
2845 @cindex callback, status message
2846 @cindex status message callback
2847
2848 @deftp {Data type} {gpgme_error_t (*gpgme_status_cb_t)(void *@var{hook}, const char *@var{keyword}, const char *@var{args})}
2849 @tindex gpgme_status_cb_t
2850 The @code{gpgme_status_cb_t} type is the type of function usable as
2851 a status message callback function.
2852
2853 The argument @var{keyword} is the name of the status message while the
2854 @var{args} argument contains any arguments for the status message.
2855
2856 If an error occurs, return the corresponding @code{gpgme_error_t}
2857 value. Otherwise, return @code{0}.
2858 @end deftp
2859
2860 @deftypefun void gpgme_set_status_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_status_cb_t @var{statusfunc}}, @w{void *@var{hook_value}})
2861 The function @code{gpgme_set_status_cb} sets the function that is used when a
2862 status message is received from gpg to @var{statusfunc}. The function
2863 @var{statusfunc} needs to be implemented by the user, and whenever it is
2864 called, it is called with its first argument being @var{hook_value}.  By
2865 default, no status message callback function is set.
2866
2867 The user can disable the use of a status message callback function by calling
2868 @code{gpgme_set_status_cb} with @var{statusfunc} being @code{NULL}.
2869 @end deftypefun
2870
2871 @deftypefun void gpgme_get_status_cb (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_status_cb_t *@var{statusfunc}}, @w{void **@var{hook_value}})
2872 The function @code{gpgme_get_status_cb} returns the function that is used to
2873 process status messages from gpg in @var{*statusfunc}, and the first argument
2874 for this function in @var{*hook_value}.  If no status message callback is set,
2875 or @var{ctx} is not a valid pointer, @code{NULL} is returned in both
2876 variables.
2877 @end deftypefun
2878
2879 @deftypefun {gpgme_error_t} gpgme_set_ctx_flag  @
2880             (@w{gpgme_ctx_t @var{ctx}}, @
2881             @w{const char *@var{name}}, @
2882             @w{const char *@var{value}})
2883
2884 Some minor properties of the context can be controlled with flags set
2885 by this function.  The properties are identified by the following
2886 values for @var{name}:
2887
2888 @table @code
2889 @item "full-status"
2890 Using a @var{value} of "1" the status callback set by
2891 gpgme_set_status_cb returns all status lines with the exception of
2892 PROGRESS lines.  With the default of "0" the status callback is only
2893 called in certain situations.
2894
2895 @item "raw-description"
2896 Setting the @var{value} to "1" returns human readable strings in a raw
2897 format.  For example the non breaking space characters ("~") will not
2898 be removed from the @code{description} field of the
2899 @code{gpgme_tofu_info_t} object.
2900
2901 @end table
2902
2903 This function returns @code{0} on success.
2904 @end deftypefun
2905
2906
2907 @node Locale
2908 @subsection Locale
2909 @cindex locale, default
2910 @cindex locale, of a context
2911
2912 A locale setting can be associated with a context.  This locale is
2913 passed to the crypto engine, and used for applications like the PIN
2914 entry, which is displayed to the user when entering a passphrase is
2915 required.
2916
2917 The default locale is used to initialize the locale setting of all
2918 contexts created afterwards.
2919
2920 @deftypefun gpgme_error_t gpgme_set_locale (@w{gpgme_ctx_t @var{ctx}}, @w{int @var{category}}, @w{const char *@var{value}})
2921 The function @code{gpgme_set_locale} sets the locale of the context
2922 @var{ctx}, or the default locale if @var{ctx} is a null pointer.
2923
2924 The locale settings that should be changed are specified by
2925 @var{category}.  Supported categories are @code{LC_CTYPE},
2926 @code{LC_MESSAGES}, and @code{LC_ALL}, which is a wildcard you can use
2927 if you want to change all the categories at once.
2928
2929 The value to be used for the locale setting is @var{value}, which will
2930 be copied to @acronym{GPGME}'s internal data structures.  @var{value}
2931 can be a null pointer, which disables setting the locale, and will
2932 make PIN entry and other applications use their default setting, which
2933 is usually not what you want.
2934
2935 Note that the settings are only used if the application runs on a text
2936 terminal, and that the settings should fit the configuration of the
2937 output terminal.  Normally, it is sufficient to initialize the default
2938 value at startup.
2939
2940 The function returns an error if not enough memory is available.
2941 @end deftypefun
2942
2943
2944 @node Key Management
2945 @section Key Management
2946 @cindex key management
2947
2948 Some of the cryptographic operations require that recipients or
2949 signers are specified.  This is always done by specifying the
2950 respective keys that should be used for the operation.  The following
2951 section describes how such keys can be selected and manipulated.
2952
2953
2954 @menu
2955 * Key objects::                   Description of the key structures.
2956 * Listing Keys::                  Browsing the list of available keys.
2957 * Information About Keys::        Requesting detailed information about keys.
2958 * Manipulating Keys::             Operations on keys.
2959 * Generating Keys::               Creating new key pairs.
2960 * Signing Keys::                  Adding key signatures to public keys.
2961 * Exporting Keys::                Retrieving key data from the key ring.
2962 * Importing Keys::                Adding keys to the key ring.
2963 * Deleting Keys::                 Removing keys from the key ring.
2964 * Changing Passphrases::          Change the passphrase of a key.
2965 * Changing TOFU Data::            Changing data pertaining to TOFU.
2966 * Advanced Key Editing::          Advanced key edit operation.
2967 @end menu
2968
2969 @node Key objects
2970 @subsection Key objects
2971
2972 The keys are represented in GPGME by structures which may only be read
2973 by the application but never be allocated or changed.  They are valid
2974 as long as the key object itself is valid.
2975
2976 @deftp {Data type} gpgme_key_t
2977
2978 The @code{gpgme_key_t} type is a pointer to a key object.  It has the
2979 following members:
2980
2981 @table @code
2982 @item gpgme_keylist_mode_t keylist_mode
2983 The keylist mode that was active when the key was retrieved.
2984
2985 @item unsigned int revoked : 1
2986 This is true if the key is revoked.
2987
2988 @item unsigned int expired : 1
2989 This is true if the key is expired.
2990
2991 @item unsigned int disabled : 1
2992 This is true if the key is disabled.
2993
2994 @item unsigned int invalid : 1
2995 This is true if the key is invalid. This might have several reasons,
2996 for a example for the S/MIME backend, it will be set during key
2997 listings if the key could not be validated due to missing
2998 certificates or unmatched policies.
2999
3000 @item unsigned int can_encrypt : 1
3001 This is true if the key (ie one of its subkeys) can be used for
3002 encryption.
3003
3004 @item unsigned int can_sign : 1
3005 This is true if the key (ie one of its subkeys) can be used to create
3006 data signatures.
3007
3008 @item unsigned int can_certify : 1
3009 This is true if the key (ie one of its subkeys) can be used to create
3010 key certificates.
3011
3012 @item unsigned int can_authenticate : 1
3013 This is true if the key (ie one of its subkeys) can be used for
3014 authentication.
3015
3016 @item unsigned int is_qualified : 1
3017 This is true if the key can be used for qualified signatures according
3018 to local government regulations.
3019
3020 @item unsigned int secret : 1
3021 This is true if the key is a secret key.  Note, that this will always
3022 be true even if the corresponding subkey flag may be false
3023 (offline/stub keys).  This is only set if a listing of secret keys has
3024 been requested or if @code{GPGME_KEYLIST_MODE_WITH_SECRET} is active.
3025
3026 @item gpgme_protocol_t protocol
3027 This is the protocol supported by this key.
3028
3029 @item char *issuer_serial
3030 If @code{protocol} is @code{GPGME_PROTOCOL_CMS}, then this is the
3031 issuer serial.
3032
3033 @item char *issuer_name
3034 If @code{protocol} is @code{GPGME_PROTOCOL_CMS}, then this is the
3035 issuer name.
3036
3037 @item char *chain_id
3038 If @code{protocol} is @code{GPGME_PROTOCOL_CMS}, then this is the
3039 chain ID, which can be used to built the certificate chain.
3040
3041 @item gpgme_validity_t owner_trust
3042 If @code{protocol} is @code{GPGME_PROTOCOL_OpenPGP}, then this is the
3043 owner trust.
3044
3045 @item gpgme_subkey_t subkeys
3046 This is a linked list with the subkeys of the key.  The first subkey
3047 in the list is the primary key and usually available.
3048
3049 @item gpgme_user_id_t uids
3050 This is a linked list with the user IDs of the key.  The first user ID
3051 in the list is the main (or primary) user ID.
3052
3053 @item char *fpr
3054 This field gives the fingerprint of the primary key.  Note that
3055 this is a copy of the fingerprint of the first subkey.  For an
3056 incomplete key (for example from a verification result) a subkey may
3057 be missing but this field may be set nevertheless.
3058
3059 @end table
3060 @end deftp
3061
3062
3063 @deftp {Data type} gpgme_subkey_t
3064
3065 The @code{gpgme_subkey_t} type is a pointer to a subkey structure.
3066 Subkeys are one component of a @code{gpgme_key_t} object.  In fact,
3067 subkeys are those parts that contains the real information about the
3068 individual cryptographic keys that belong to the same key object.  One
3069 @code{gpgme_key_t} can contain several subkeys.  The first subkey in
3070 the linked list is also called the primary key.
3071
3072 The subkey structure has the following members:
3073
3074 @table @code
3075 @item gpgme_subkey_t next
3076 This is a pointer to the next subkey structure in the linked list, or
3077 @code{NULL} if this is the last element.
3078
3079 @item unsigned int revoked : 1
3080 This is true if the subkey is revoked.
3081
3082 @item unsigned int expired : 1
3083 This is true if the subkey is expired.
3084
3085 @item unsigned int disabled : 1
3086 This is true if the subkey is disabled.
3087
3088 @item unsigned int invalid : 1
3089 This is true if the subkey is invalid.
3090
3091 @item unsigned int can_encrypt : 1
3092 This is true if the subkey can be used for encryption.
3093
3094 @item unsigned int can_sign : 1
3095 This is true if the subkey can be used to create data signatures.
3096
3097 @item unsigned int can_certify : 1
3098 This is true if the subkey can be used to create key certificates.
3099
3100 @item unsigned int can_authenticate : 1
3101 This is true if the subkey can be used for authentication.
3102
3103 @item unsigned int is_qualified : 1
3104 This is true if the subkey can be used for qualified signatures
3105 according to local government regulations.
3106
3107 @item unsigned int secret : 1
3108 This is true if the subkey is a secret key.  Note that it will be
3109 false if the key is actually a stub key; i.e. a secret key operation
3110 is currently not possible (offline-key).  This is only set if a
3111 listing of secret keys has been requested or if
3112 @code{GPGME_KEYLIST_MODE_WITH_SECRET} is active.
3113
3114 @item gpgme_pubkey_algo_t pubkey_algo
3115 This is the public key algorithm supported by this subkey.
3116
3117 @item unsigned int length
3118 This is the length of the subkey (in bits).
3119
3120 @item char *keyid
3121 This is the key ID of the subkey in hexadecimal digits.
3122
3123 @item char *fpr
3124 This is the fingerprint of the subkey in hexadecimal digits, if
3125 available.
3126
3127 @item char *keygrip
3128 The keygrip of the subkey in hex digit form or @code{NULL} if not
3129 availabale.
3130
3131 @item long int timestamp
3132 This is the creation timestamp of the subkey.  This is -1 if the
3133 timestamp is invalid, and 0 if it is not available.
3134
3135 @item long int expires
3136 This is the expiration timestamp of the subkey, or 0 if the subkey
3137 does not expire.
3138
3139 @item unsigned int is_cardkey : 1
3140 True if the secret key is stored on a smart card.
3141
3142 @item char *card_number
3143 The serial number of a smart card holding this key or @code{NULL}.
3144
3145 @item char *curve
3146 For ECC algorithms the name of the curve.
3147
3148 @end table
3149 @end deftp
3150
3151 @deftp {Data type} gpgme_user_id_t
3152
3153 A user ID is a component of a @code{gpgme_key_t} object.  One key can
3154 have many user IDs.  The first one in the list is the main (or
3155 primary) user ID.
3156
3157 The user ID structure has the following members.
3158
3159 @table @code
3160 @item gpgme_user_id_t next
3161 This is a pointer to the next user ID structure in the linked list, or
3162 @code{NULL} if this is the last element.
3163
3164 @item unsigned int revoked : 1
3165 This is true if the user ID is revoked.
3166
3167 @item unsigned int invalid : 1
3168 This is true if the user ID is invalid.
3169
3170 @item gpgme_validity_t validity
3171 This specifies the validity of the user ID.
3172
3173 @item char *uid
3174 This is the user ID string.
3175
3176 @item char *name
3177 This is the name component of @code{uid}, if available.
3178
3179 @item char *comment
3180 This is the comment component of @code{uid}, if available.
3181
3182 @item char *email
3183 This is the email component of @code{uid}, if available.
3184
3185 @item char *address;
3186 The mail address (addr-spec from RFC-5322) of the user ID string.
3187 This is general the same as the @code{email} part of this structure
3188 but might be slightly different.  If no mail address is available
3189 @code{NULL} is stored.
3190
3191 @item gpgme_tofu_info_t tofu
3192 If not @code{NULL} information from the TOFU database pertaining to
3193 this user id.
3194
3195 @item gpgme_key_sig_t signatures
3196 This is a linked list with the signatures on this user ID.
3197 @end table
3198 @end deftp
3199
3200
3201 @deftp {Data type} gpgme_key_sig_t
3202
3203 The @code{gpgme_key_sig_t} type is a pointer to a key signature structure.
3204 Key signatures are one component of a @code{gpgme_key_t} object, and
3205 validate user IDs on the key in the OpenPGP protocol.
3206
3207 The signatures on a key are only available if the key was retrieved
3208 via a listing operation with the @code{GPGME_KEYLIST_MODE_SIGS} mode
3209 enabled, because it can be expensive to retrieve all signatures of a
3210 key.
3211
3212 The signature notations on a key signature are only available if the
3213 key was retrieved via a listing operation with the
3214 @code{GPGME_KEYLIST_MODE_SIG_NOTATIONS} mode enabled, because it can
3215 be expensive to retrieve all signature notations.
3216
3217 The key signature structure has the following members:
3218
3219 @table @code
3220 @item gpgme_key_sig_t next
3221 This is a pointer to the next key signature structure in the linked
3222 list, or @code{NULL} if this is the last element.
3223
3224 @item unsigned int revoked : 1
3225 This is true if the key signature is a revocation signature.
3226
3227 @item unsigned int expired : 1
3228 This is true if the key signature is expired.
3229
3230 @item unsigned int invalid : 1
3231 This is true if the key signature is invalid.
3232
3233 @item unsigned int exportable : 1
3234 This is true if the key signature is exportable.
3235
3236 @item gpgme_pubkey_algo_t pubkey_algo
3237 This is the public key algorithm used to create the signature.
3238
3239 @item char *keyid
3240 This is the key ID of the key (in hexadecimal digits) used to create
3241 the signature.
3242
3243 @item long int timestamp
3244 This is the creation timestamp of the key signature.  This is -1 if
3245 the timestamp is invalid, and 0 if it is not available.
3246
3247 @item long int expires
3248 This is the expiration timestamp of the key signature, or 0 if the key
3249 signature does not expire.
3250
3251 @item gpgme_error_t status
3252 This is the status of the signature and has the same meaning as the
3253 member of the same name in a @code{gpgme_signature_t} object.
3254
3255 @item unsigned int sig_class
3256 This specifies the signature class of the key signature.  The meaning
3257 is specific to the crypto engine.
3258
3259 @item char *uid
3260 This is the main user ID of the key used to create the signature.
3261
3262 @item char *name
3263 This is the name component of @code{uid}, if available.
3264
3265 @item char *comment
3266 This is the comment component of @code{uid}, if available.
3267
3268 @item char *email
3269 This is the email component of @code{uid}, if available.
3270
3271 @item gpgme_sig_notation_t notations
3272 This is a linked list with the notation data and policy URLs.
3273 @end table
3274 @end deftp
3275
3276
3277
3278 @node Listing Keys
3279 @subsection Listing Keys
3280 @cindex listing keys
3281 @cindex key listing
3282 @cindex key listing, start
3283 @cindex key ring, list
3284 @cindex key ring, search
3285
3286 @deftypefun gpgme_error_t gpgme_op_keylist_start (@w{gpgme_ctx_t @var{ctx}}, @w{const char *@var{pattern}}, @w{int @var{secret_only}})
3287 The function @code{gpgme_op_keylist_start} initiates a key listing
3288 operation inside the context @var{ctx}.  It sets everything up so that
3289 subsequent invocations of @code{gpgme_op_keylist_next} return the keys
3290 in the list.
3291
3292 If @var{pattern} is @code{NULL}, all available keys are returned.
3293 Otherwise, @var{pattern} contains an engine specific expression that
3294 is used to limit the list to all keys matching the pattern.  Note that
3295 the total length of the pattern is restricted to an engine-specific
3296 maximum (a couple of hundred characters are usually accepted).  The
3297 pattern should be used to restrict the search to a certain common name
3298 or user, not to list many specific keys at once by listing their
3299 fingerprints or key IDs.
3300
3301 If @var{secret_only} is not @code{0}, the list is restricted to secret
3302 keys only.
3303
3304 The context will be busy until either all keys are received (and
3305 @code{gpgme_op_keylist_next} returns @code{GPG_ERR_EOF}), or
3306 @code{gpgme_op_keylist_end} is called to finish the operation.
3307
3308 The function returns the error code @code{GPG_ERR_INV_VALUE} if
3309 @var{ctx} is not a valid pointer, and passes through any errors that
3310 are reported by the crypto engine support routines.
3311 @end deftypefun
3312
3313 @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}})
3314 The function @code{gpgme_op_keylist_ext_start} initiates an extended
3315 key listing operation inside the context @var{ctx}.  It sets
3316 everything up so that subsequent invocations of
3317 @code{gpgme_op_keylist_next} return the keys in the list.
3318
3319 If @var{pattern} or @var{*pattern} is @code{NULL}, all available keys
3320 are returned.  Otherwise, @var{pattern} is a @code{NULL} terminated
3321 array of strings that are used to limit the list to all keys matching
3322 at least one of the patterns verbatim.  Note that the total length of
3323 all patterns is restricted to an engine-specific maximum (the exact
3324 limit also depends on the number of patterns and amount of quoting
3325 required, but a couple of hundred characters are usually accepted).
3326 Patterns should be used to restrict the search to a certain common
3327 name or user, not to list many specific keys at once by listing their
3328 fingerprints or key IDs.
3329
3330 If @var{secret_only} is not @code{0}, the list is restricted to secret
3331 keys only.
3332
3333 The value of @var{reserved} must be @code{0}.
3334
3335 The context will be busy until either all keys are received (and
3336 @code{gpgme_op_keylist_next} returns @code{GPG_ERR_EOF}), or
3337 @code{gpgme_op_keylist_end} is called to finish the operation.
3338
3339 The function returns the error code @code{GPG_ERR_INV_VALUE} if
3340 @var{ctx} is not a valid pointer, and passes through any errors that
3341 are reported by the crypto engine support routines.
3342 @end deftypefun
3343
3344 @deftypefun gpgme_error_t gpgme_op_keylist_next (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t *@var{r_key}})
3345 The function @code{gpgme_op_keylist_next} returns the next key in the
3346 list created by a previous @code{gpgme_op_keylist_start} operation in
3347 the context @var{ctx}.  The key will have one reference for the user.
3348 @xref{Manipulating Keys}.
3349
3350 This is the only way to get at @code{gpgme_key_t} objects in
3351 @acronym{GPGME}.
3352
3353 If the last key in the list has already been returned,
3354 @code{gpgme_op_keylist_next} returns @code{GPG_ERR_EOF}.
3355
3356 The function returns the error code @code{GPG_ERR_INV_VALUE} if
3357 @var{ctx} or @var{r_key} is not a valid pointer, and
3358 @code{GPG_ERR_ENOMEM} if there is not enough memory for the operation.
3359 @end deftypefun
3360
3361 @deftypefun gpgme_error_t gpgme_op_keylist_end (@w{gpgme_ctx_t @var{ctx}})
3362 The function @code{gpgme_op_keylist_end} ends a pending key list
3363 operation in the context @var{ctx}.
3364
3365 After the operation completed successfully, the result of the key
3366 listing operation can be retrieved with
3367 @code{gpgme_op_keylist_result}.
3368
3369 The function returns the error code @code{GPG_ERR_INV_VALUE} if
3370 @var{ctx} is not a valid pointer, and @code{GPG_ERR_ENOMEM} if at some
3371 time during the operation there was not enough memory available.
3372 @end deftypefun
3373
3374 The following example illustrates how all keys containing a certain
3375 string (@code{g10code}) can be listed with their key ID and the name
3376 and e-mail address of the main user ID:
3377
3378 @example
3379 gpgme_ctx_t ctx;
3380 gpgme_key_t key;
3381 gpgme_error_t err = gpgme_new (&ctx);
3382
3383 if (!err)
3384   @{
3385     err = gpgme_op_keylist_start (ctx, "g10code", 0);
3386     while (!err)
3387       @{
3388         err = gpgme_op_keylist_next (ctx, &key);
3389         if (err)
3390           break;
3391         printf ("%s:", key->subkeys->keyid);
3392         if (key->uids && key->uids->name)
3393           printf (" %s", key->uids->name);
3394         if (key->uids && key->uids->email)
3395           printf (" <%s>", key->uids->email);
3396         putchar ('\n');
3397         gpgme_key_release (key);
3398       @}
3399     gpgme_release (ctx);
3400   @}
3401 if (gpg_err_code (err) != GPG_ERR_EOF)
3402   @{
3403     fprintf (stderr, "can not list keys: %s\n", gpgme_strerror (err));
3404     exit (1);
3405   @}
3406 @end example
3407
3408 @deftp {Data type} {gpgme_keylist_result_t}
3409 This is a pointer to a structure used to store the result of a
3410 @code{gpgme_op_keylist_*} operation.  After successfully ending a key
3411 listing operation, you can retrieve the pointer to the result with
3412 @code{gpgme_op_keylist_result}.  The structure contains the following
3413 member:
3414
3415 @table @code
3416 @item unsigned int truncated : 1
3417 This is true if the crypto backend had to truncate the result, and
3418 less than the desired keys could be listed.
3419 @end table
3420 @end deftp
3421
3422 @deftypefun gpgme_keylist_result_t gpgme_op_keylist_result (@w{gpgme_ctx_t @var{ctx}})
3423 The function @code{gpgme_op_keylist_result} returns a
3424 @code{gpgme_keylist_result_t} pointer to a structure holding the
3425 result of a @code{gpgme_op_keylist_*} operation.  The pointer is only
3426 valid if the last operation on the context was a key listing
3427 operation, and if this operation finished successfully.  The returned
3428 pointer is only valid until the next operation is started on the
3429 context.
3430 @end deftypefun
3431
3432 In a simple program, for which a blocking operation is acceptable, the
3433 following function can be used to retrieve a single key.
3434
3435 @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}})
3436 The function @code{gpgme_get_key} gets the key with the fingerprint
3437 (or key ID) @var{fpr} from the crypto backend and return it in
3438 @var{r_key}.  If @var{secret} is true, get the secret key.  The
3439 currently active keylist mode is used to retrieve the key.  The key
3440 will have one reference for the user.
3441
3442 If the key is not found in the keyring, @code{gpgme_get_key} returns
3443 the error code @code{GPG_ERR_EOF} and *@var{r_key} will be set to
3444 @code{NULL}.
3445
3446 The function returns the error code @code{GPG_ERR_INV_VALUE} if
3447 @var{ctx} or @var{r_key} is not a valid pointer or @var{fpr} is not a
3448 fingerprint or key ID, @code{GPG_ERR_AMBIGUOUS_NAME} if the key ID was
3449 not a unique specifier for a key, and @code{GPG_ERR_ENOMEM} if at some
3450 time during the operation there was not enough memory available.
3451 @end deftypefun
3452
3453
3454 @node Information About Keys
3455 @subsection Information About Keys
3456 @cindex key, information about
3457 @cindex key, attributes
3458 @cindex attributes, of a key
3459
3460 Please see the beginning of this section for more information about
3461 @code{gpgme_key_t} objects.
3462
3463 @deftp {Data type} gpgme_validity_t
3464 The @code{gpgme_validity_t} type is used to specify the validity of a user ID
3465 in a key.  The following validities are defined:
3466
3467 @table @code
3468 @item GPGME_VALIDITY_UNKNOWN
3469 The user ID is of unknown validity.  The string representation of this
3470 validity is ``?''.
3471
3472 @item GPGME_VALIDITY_UNDEFINED
3473 The validity of the user ID is undefined.  The string representation of this
3474 validity is ``q''.
3475
3476 @item GPGME_VALIDITY_NEVER
3477 The user ID is never valid.  The string representation of this
3478 validity is ``n''.
3479
3480 @item GPGME_VALIDITY_MARGINAL
3481 The user ID is marginally valid.  The string representation of this
3482 validity is ``m''.
3483
3484 @item GPGME_VALIDITY_FULL
3485 The user ID is fully valid.  The string representation of this
3486 validity is ``f''.
3487
3488 @item GPGME_VALIDITY_ULTIMATE
3489 The user ID is ultimately valid.  The string representation of this
3490 validity is ``u''.
3491 @end table
3492 @end deftp
3493
3494
3495
3496
3497 @node Manipulating Keys
3498 @subsection Manipulating Keys
3499 @cindex key, manipulation
3500
3501 @deftypefun void gpgme_key_ref (@w{gpgme_key_t @var{key}})
3502 The function @code{gpgme_key_ref} acquires an additional reference for
3503 the key @var{key}.
3504 @end deftypefun
3505
3506 @deftypefun void gpgme_key_unref (@w{gpgme_key_t @var{key}})
3507 The function @code{gpgme_key_unref} releases a reference for the key
3508 @var{key}.  If this was the last reference, the key will be destroyed
3509 and all resources associated to it will be released.
3510 @end deftypefun
3511
3512
3513 @node Generating Keys
3514 @subsection Generating Keys
3515 @cindex key, creation
3516 @cindex key ring, add
3517
3518 GPGME provides a set of functions to create public key pairs.  Most of
3519 these functions require the use of GnuPG 2.1 and later; for older
3520 GnuPG versions the @code{gpgme_op_genkey} function can be used.
3521 Existing code which wants to update to the new functions or new code
3522 which shall supports older GnuPG versions may try the new functions
3523 first and provide a fallback to the old function if the error code
3524 @code{GPG_ERR_NOT_SUPPORTED} is received.
3525
3526 @c
3527 @c  gpgme_op_createkey
3528 @c
3529 @deftypefun gpgme_error_t gpgme_op_createkey @
3530       (@w{gpgme_ctx_t @var{ctx}}, @
3531        @w{const char *@var{userid}}, @
3532        @w{const char *@var{algo}}, @
3533        @w{unsigned long @var{reserved}}, @
3534        @w{unsigned long @var{expires}}, @
3535        @w{gpgme_key_t @var{extrakey}}, @
3536        @w{unsigned int @var{flags}});
3537
3538 The function @code{gpgme_op_createkey} generates a new key for the
3539 procotol active in the context @var{ctx}.  As of now this function
3540 does only work for OpenPGP and requires at least version 2.1.13 of
3541 GnuPG.
3542
3543 @var{userid} is commonly the mail address associated with the key.
3544 GPGME does not require a specificy syntax but if more than a mail
3545 address is given, RFC-822 style format is suggested.  The value is
3546 expected to be in UTF-8 encoding (i.e. no IDN encoding for mail
3547 addresses).  This is a required parameter.
3548
3549 @var{algo} specifies the algorithm for the new key (actually a keypair
3550 of public and private key).  For a list of supported algorithms, see
3551 the GnuPG manual.  If @var{algo} is @code{NULL} or the string
3552 "default", the key is generated using the default algorithm of the
3553 engine.  If the string "future-default" is used the engine may use an
3554 algorithm which is planned to be the default in a future release of
3555 the engine; however existing implementation of the protocol may not be
3556 able to already handle such future algorithms.  For the OpenPGP
3557 protocol, the specification of a default algorithm, without requesting
3558 a non-default usage via @var{flags}, triggers the creation of a
3559 primary key plus a secondary key (subkey).
3560
3561 @var{reserved} must be set to zero.
3562
3563 @var{expires} can be set to the number of seconds since Epoch of the
3564 desired expiration date in UTC for the new key.   Using 0 does not
3565 set an expiration date.  Note that this parameter takes an unsigned long
3566 value and not a @code{time_t} to avoid problems on systems which use a
3567 signed 32 bit @code{time_t}.  Note further that the OpenPGP protocol
3568 uses 32 bit values for timestamps and thus can only encode dates up to
3569 the year 2106.
3570
3571 @var{extrakey} is currently not used and must be set to @code{NULL}.
3572 A future version of GPGME may use this parameter to create X.509 keys.
3573
3574 @var{flags} can be set to the bit-wise OR of the following flags:
3575
3576 @table @code
3577 @item GPGME_CREATE_SIGN
3578 @itemx GPGME_CREATE_ENCR
3579 @itemx GPGME_CREATE_CERT
3580 @itemx GPGME_CREATE_AUTH
3581 Do not create the key with the default capabilities (key usage) of the
3582 requested algorithm but use those explicitly given by these flags:
3583 ``signing'', ``encryption'', ``certification'', or ``authentication''.
3584 The allowed combinations depend on the algorithm.
3585
3586 If any of these flags are set and a default algorithm has been
3587 selected only one key is created in the case of the OpenPGP
3588 protocol.
3589
3590 @item GPGME_CREATE_NOPASSWD
3591 Request generation of the key without password protection.
3592
3593 @item GPGME_CREATE_SELFSIGNED
3594 For an X.509 key do not create a CSR but a self-signed certificate.
3595 This has not yet been implemented.
3596
3597 @item GPGME_CREATE_NOSTORE
3598 Do not store the created key in the local key database.
3599 This has not yet been implemented.
3600
3601 @item GPGME_CREATE_WANTPUB
3602 @itemx GPGME_CREATE_WANTSEC
3603 Return the public or secret key as part of the result structure.
3604 This has not yet been implemented.
3605
3606 @item GPGME_CREATE_FORCE
3607 The engine does not allow the creation of a key with a user ID
3608 already existing in the local key database.  This flag can be used to
3609 override this check.
3610
3611 @end table
3612
3613 After the operation completed successfully, information about the
3614 created key can be retrieved with @code{gpgme_op_genkey_result}.
3615
3616 The function returns zero on success, @code{GPG_ERR_NOT_SUPPORTED} if
3617 the engine does not support the command, or a bunch of other error
3618 codes.
3619
3620 @end deftypefun
3621
3622
3623 @deftypefun gpgme_error_t gpgme_op_createkey_start @
3624       (@w{gpgme_ctx_t @var{ctx}}, @
3625        @w{const char *@var{userid}}, @
3626        @w{const char *@var{algo}}, @
3627        @w{unsigned long @var{reserved}}, @
3628        @w{unsigned long @var{expires}}, @
3629        @w{gpgme_key_t @var{extrakey}}, @
3630        @w{unsigned int @var{flags}});
3631
3632 The function @code{gpgme_op_createkey_start} initiates a
3633 @code{gpgme_op_createkey} operation; see there for details.  It must
3634 be completed by calling @code{gpgme_wait} on the context.
3635 @xref{Waiting For Completion}.
3636
3637 @end deftypefun
3638
3639 @c
3640 @c  gpgme_op_createsubkey
3641 @c
3642 @deftypefun gpgme_error_t gpgme_op_createsubkey @
3643       (@w{gpgme_ctx_t @var{ctx}}, @
3644        @w{gpgme_key_t @var{key}}, @
3645        @w{const char *@var{algo}}, @
3646        @w{unsigned long @var{reserved}}, @
3647        @w{unsigned long @var{expires}}, @
3648        @w{unsigned int @var{flags}});
3649
3650 The function @code{gpgme_op_createsubkey} creates and adds a new
3651 subkey to the primary OpenPGP key given by @var{KEY}.  The only
3652 allowed protocol in @var{ctx} is @code{GPGME_PROTOCOL_OPENPGP}.
3653 Subkeys (aka secondary keys) are a concept in the OpenPGP protocol to
3654 bind several keys to a primary key.  As of now this function requires
3655 at least version 2.1.13 of GnuPG.
3656
3657 @var{key} specifies the key to operate on.
3658
3659 @var{algo} specifies the algorithm for the new subkey.  For a list of
3660 supported algorithms, see the GnuPG manual.  If @var{algo} is
3661 @code{NULL} or the string "default", the subkey is generated using the
3662 default algorithm for an encryption subkey of the engine.  If the
3663 string "future-default" is used the engine may use an encryption
3664 algorithm which is planned to be the default in a future release of
3665 the engine; however existing implementation of the protocol may not be
3666 able to already handle such future algorithms.
3667
3668 @var{reserved} must be set to zero.
3669
3670 @var{expires} can be set to the number of seconds since Epoch of the
3671 desired expiration date in UTC for the new subkey.   Using 0 does not
3672 set an expiration date.  Note that this parameter takes an unsigned long
3673 value and not a @code{time_t} to avoid problems on systems which use a
3674 signed 32 bit @code{time_t}.  Note further that the OpenPGP protocol
3675 uses 32 bit values for timestamps and thus can only encode dates up to
3676 the year 2106.
3677
3678 @var{flags} takes the same values as described above for
3679 @code{gpgme_op_createkey}.
3680
3681 After the operation completed successfully, information about the
3682 created key can be retrieved with @code{gpgme_op_genkey_result}.
3683
3684 The function returns zero on success, @code{GPG_ERR_NOT_SUPPORTED} if
3685 the engine does not support the command, or a bunch of other error
3686 codes.
3687
3688
3689 @end deftypefun
3690
3691 @deftypefun gpgme_error_t gpgme_op_createsubkey_start @
3692       (@w{gpgme_ctx_t @var{ctx}}, @
3693        @w{gpgme_key_t @var{key}}, @
3694        @w{const char *@var{algo}}, @
3695        @w{unsigned long @var{reserved}}, @
3696        @w{unsigned long @var{expires}}, @
3697        @w{unsigned int @var{flags}});
3698
3699 The function @code{gpgme_op_createsubkey_start} initiates a
3700 @code{gpgme_op_createsubkey} operation; see there for details.  It must
3701 be completed by calling @code{gpgme_wait} on the context.
3702 @xref{Waiting For Completion}.
3703
3704 @end deftypefun
3705
3706
3707 @c
3708 @c  gpgme_op_adduid
3709 @c
3710 @deftypefun gpgme_error_t gpgme_op_adduid @
3711       (@w{gpgme_ctx_t @var{ctx}}, @
3712        @w{gpgme_key_t @var{key}}, @
3713        @w{const char *@var{userid}}, @
3714        @w{unsigned int @var{flags}});
3715
3716 The function @code{gpgme_op_adduid} adds a new user ID to the OpenPGP
3717 key given by @var{KEY}.  Adding additional user IDs after key creation
3718 is a feature of the OpenPGP protocol and thus the protocol for the
3719 context @var{ctx} must be set to OpenPGP.  As of now this function
3720 requires at least version 2.1.13 of GnuPG.
3721
3722 @var{key} specifies the key to operate on.
3723
3724 @var{userid} is the user ID to add to the key.  A user ID is commonly
3725 the mail address to be associated with the key.  GPGME does not
3726 require a specificy syntax but if more than a mail address is given,
3727 RFC-822 style format is suggested.  The value is expected to be in
3728 UTF-8 encoding (i.e. no IDN encoding for mail addresses).  This is a
3729 required parameter.
3730
3731 @var{flags} are currently not used and must be set to zero.
3732
3733 The function returns zero on success, @code{GPG_ERR_NOT_SUPPORTED} if
3734 the engine does not support the command, or a bunch of other error
3735 codes.
3736
3737 @end deftypefun
3738
3739 @deftypefun gpgme_error_t gpgme_op_adduid_start @
3740       (@w{gpgme_ctx_t @var{ctx}}, @
3741        @w{gpgme_key_t @var{key}}, @
3742        @w{const char *@var{userid}}, @
3743        @w{unsigned int @var{flags}});
3744
3745 The function @code{gpgme_op_adduid_start} initiates a
3746 @code{gpgme_op_adduid} operation; see there for details.  It must
3747 be completed by calling @code{gpgme_wait} on the context.
3748 @xref{Waiting For Completion}.
3749
3750 @end deftypefun
3751
3752
3753 @c
3754 @c  gpgme_op_revuid
3755 @c
3756 @deftypefun gpgme_error_t gpgme_op_revuid @
3757       (@w{gpgme_ctx_t @var{ctx}}, @
3758        @w{gpgme_key_t @var{key}}, @
3759        @w{const char *@var{userid}}, @
3760        @w{unsigned int @var{flags}});
3761
3762 The function @code{gpgme_op_revuid} revokes a user ID from the OpenPGP
3763 key given by @var{KEY}.  Revoking user IDs after key creation is a
3764 feature of the OpenPGP protocol and thus the protocol for the context
3765 @var{ctx} must be set to OpenPGP.  As of now this function requires at
3766 least version 2.1.13 of GnuPG.
3767
3768 @var{key} specifies the key to operate on.
3769
3770 @var{userid} is the user ID to be revoked from the key.  The user ID
3771 must be given verbatim because the engine does an exact and case
3772 sensitive match.  Thus the @code{uid} field from the user ID object
3773 (@code{gpgme_user_id_t}) is to be used.  This is a required parameter.
3774
3775 @var{flags} are currently not used and must be set to zero.
3776
3777 Note that the engine won't allow to revoke the last valid user ID.  To
3778 change a user ID is better to first add the new user ID, then revoke
3779 the old one, and finally publish the key.
3780
3781 The function returns zero on success, @code{GPG_ERR_NOT_SUPPORTED} if
3782 the engine does not support the command, or a bunch of other error
3783 codes.
3784
3785 @end deftypefun
3786
3787 @deftypefun gpgme_error_t gpgme_op_revuid_start @
3788       (@w{gpgme_ctx_t @var{ctx}}, @
3789        @w{gpgme_key_t @var{key}}, @
3790        @w{const char *@var{userid}}, @
3791        @w{unsigned int @var{flags}});
3792
3793 The function @code{gpgme_op_revuid_start} initiates a
3794 @code{gpgme_op_revuid} operation; see there for details.  It must
3795 be completed by calling @code{gpgme_wait} on the context.
3796 @xref{Waiting For Completion}.
3797
3798 @end deftypefun
3799
3800
3801 @c
3802 @c  gpgme_op_genkey
3803 @c
3804 @deftypefun gpgme_error_t gpgme_op_genkey @
3805       (@w{gpgme_ctx_t @var{ctx}}, @
3806        @w{const char *@var{parms}}, @
3807        @w{gpgme_data_t @var{public}}, @
3808        @w{gpgme_data_t @var{secret}})
3809
3810 The function @code{gpgme_op_genkey} generates a new key pair in the
3811 context @var{ctx}.  The meaning of @var{public} and @var{secret}
3812 depends on the crypto backend.
3813
3814 GPG does not support @var{public} and @var{secret}, they should be
3815 @code{NULL}.  GnuPG will generate a key pair and add it to the
3816 standard key ring.  The fingerprint of the generated key is available
3817 with @code{gpgme_op_genkey_result}.
3818
3819 GpgSM requires @var{public} to be a writable data object.  GpgSM will
3820 generate a secret key (which will be stored by @command{gpg-agent},
3821 and return a certificate request in @var{public}, which then needs to
3822 be signed by the certification authority and imported before it can be
3823 used.  GpgSM does not make the fingerprint available.
3824
3825 The argument @var{parms} specifies parameters for the key in an XML
3826 string.  The details about the format of @var{parms} are specific to
3827 the crypto engine used by @var{ctx}.  Here is an example for GnuPG as
3828 the crypto engine (all parameters of OpenPGP key generation are
3829 documented in the GPG manual):
3830
3831 @example
3832 <GnupgKeyParms format="internal">
3833 Key-Type: default
3834 Subkey-Type: default
3835 Name-Real: Joe Tester
3836 Name-Comment: with stupid passphrase
3837 Name-Email: joe@@foo.bar
3838 Expire-Date: 0
3839 Passphrase: abc
3840 </GnupgKeyParms>
3841 @end example
3842
3843 Here is an example for GpgSM as the crypto engine (all parameters of
3844 OpenPGP key generation are documented in the GPGSM manual):
3845
3846 @example
3847 <GnupgKeyParms format="internal">
3848 Key-Type: RSA
3849 Key-Length: 1024
3850 Name-DN: C=de,O=g10 code,OU=Testlab,CN=Joe 2 Tester
3851 Name-Email: joe@@foo.bar
3852 </GnupgKeyParms>
3853 @end example
3854
3855 Strings should be given in UTF-8 encoding.  The only format supported
3856 for now is ``internal''.  The content of the @code{GnupgKeyParms}
3857 container is passed verbatim to the crypto backend.  Control
3858 statements are not allowed.
3859
3860 After the operation completed successfully, the result can be
3861 retrieved with @code{gpgme_op_genkey_result}.
3862
3863 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
3864 operation could be started successfully, @code{GPG_ERR_INV_VALUE} if
3865 @var{parms} is not a valid XML string, @code{GPG_ERR_NOT_SUPPORTED} if
3866 @var{public} or @var{secret} is not valid, and @code{GPG_ERR_GENERAL}
3867 if no key was created by the backend.
3868 @end deftypefun
3869
3870 @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}})
3871
3872 The function @code{gpgme_op_genkey_start} initiates a
3873 @code{gpgme_op_genkey} operation.  It can be completed by calling
3874 @code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
3875
3876 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
3877 operation could be started successfully, @code{GPG_ERR_INV_VALUE} if
3878 @var{parms} is not a valid XML string, and
3879 @code{GPG_ERR_NOT_SUPPORTED} if @var{public} or @var{secret} is not
3880 @code{NULL}.
3881 @end deftypefun
3882
3883
3884 @c
3885 @c  gpgme_op_genkey_result
3886 @c
3887 @deftp {Data type} {gpgme_genkey_result_t}
3888
3889 This is a pointer to a structure used to store the result of a
3890 @code{gpgme_op_genkey} operation.  After successfully generating a
3891 key, you can retrieve the pointer to the result with
3892 @code{gpgme_op_genkey_result}.  The structure contains the following
3893 members:
3894
3895 @table @code
3896 @item unsigned int primary : 1
3897 This flag is set to 1 if a primary key was created and to 0
3898 if not.
3899
3900 @item unsigned int sub : 1
3901 This flag is set to 1 if a subkey was created and to 0 if not.
3902
3903 @item unsigned int uid : 1
3904 This flag is set to 1 if a user ID was created and to 0 if not.
3905
3906 @item char *fpr
3907 This is the fingerprint of the key that was created.  If both a
3908 primary and a subkey were generated, the fingerprint of the primary
3909 key will be returned.  If the crypto engine does not provide the
3910 fingerprint, @code{fpr} will be a null pointer.
3911
3912 @item gpgme_data_t pubkey
3913 This will eventually be used to return the public key.  It is
3914 currently not used.
3915
3916 @item gpgme_data_t seckey
3917 This will eventually be used to return the secret key.  It is
3918 currently not used.
3919
3920 @end table
3921 @end deftp
3922
3923 @deftypefun gpgme_genkey_result_t gpgme_op_genkey_result (@w{gpgme_ctx_t @var{ctx}})
3924
3925 The function @code{gpgme_op_genkey_result} returns a
3926 @code{gpgme_genkey_result_t} pointer to a structure holding the result of
3927 a @code{gpgme_op_genkey} operation.  The pointer is only valid if the
3928 last operation on the context was a @code{gpgme_op_genkey} or
3929 @code{gpgme_op_genkey_start} operation, and if this operation finished
3930 successfully.  The returned pointer is only valid until the next
3931 operation is started on the context.
3932
3933 @end deftypefun
3934
3935
3936 @c
3937 @c  SIGNING KEYS
3938 @c
3939 @node Signing Keys
3940 @subsection Signing Keys
3941 @cindex key, signing
3942
3943 Key signatures are a unique concept of the OpenPGP protocol.  They can
3944 be used to certify the validity of a key and are used to create the
3945 Web-of-Trust (WoT).  Instead of using the @code{gpgme_op_interact}
3946 function along with a finite state machine, GPGME provides a
3947 convenient function to create key signatures when using modern GnuPG
3948 versions.
3949
3950
3951 @c
3952 @c  gpgme_op_keysign
3953 @c
3954 @deftypefun gpgme_error_t gpgme_op_keysign @
3955       (@w{gpgme_ctx_t @var{ctx}}, @
3956        @w{gpgme_key_t @var{key}}, @
3957        @w{const char *@var{userid}}, @
3958        @w{unsigned long @var{expires}}, @
3959        @w{unsigned int @var{flags}});
3960
3961 The function @code{gpgme_op_keysign} adds a new key signature to the
3962 public key @var{KEY}.   This function requires at least version 2.1.12 of
3963 GnuPG.
3964
3965 @var{CTX} is the usual context which describes the protocol to use
3966 (which must be OpenPGP) and has also the list of signer keys to be
3967 used for the signature.  The common case is to use the default key for
3968 signing other keys.  If another key or more than one key shall be used
3969 for a key signature, @code{gpgme_signers_add} can be used.
3970 @xref{Selecting Signers}.
3971
3972 @var{key} specifies the key to operate on.
3973
3974 @var{userid} selects the user ID or user IDs to be signed.  If
3975 @var{userid} is set to @code{NULL} all valid user IDs are signed.  The
3976 user ID must be given verbatim because the engine does an exact and
3977 case sensitive match.  Thus the @code{uid} field from the user ID
3978 object (@code{gpgme_user_id_t}) is to be used.  To select more than
3979 one user ID put them all into one string separated by linefeeds
3980 characters (@code{\n}) and set the flag @code{GPGME_KEYSIGN_LFSEP}.
3981
3982 @var{expires} can be set to the number of seconds since Epoch of the
3983 desired expiration date in UTC for the new signature.  The common case
3984 is to use 0 to not set an expiration date.  However, if the
3985 configuration of the engine defines a default expiration for key
3986 signatures, that is still used unless the flag
3987 @code{GPGME_KEYSIGN_NOEXPIRE} is used.  Note that this parameter takes
3988 an unsigned long value and not a @code{time_t} to avoid problems on
3989 systems which use a signed 32 bit @code{time_t}.  Note further that
3990 the OpenPGP protocol uses 32 bit values for timestamps and thus can
3991 only encode dates up to the year 2106.
3992
3993 @var{flags} can be set to the bit-wise OR of the following flags:
3994
3995 @table @code
3996 @item GPGME_KEYSIGN_LOCAL
3997 Instead of creating an exportable key signature, create a key
3998 signature which is is marked as non-exportable.
3999
4000 @item GPGME_KEYSIGN_LFSEP
4001 Although linefeeds are uncommon in user IDs this flag is required to
4002 explicitly declare that @var{userid} may contain several linefeed
4003 separated user IDs.
4004
4005 @item GPGME_KEYSIGN_NOEXPIRE
4006 Force the creation of a key signature without an expiration date.  This
4007 overrides @var{expire} and any local configuration of the engine.
4008
4009 @end table
4010
4011 The function returns zero on success, @code{GPG_ERR_NOT_SUPPORTED} if
4012 the engine does not support the command, or a bunch of other error
4013 codes.
4014
4015 @end deftypefun
4016
4017
4018 @deftypefun gpgme_error_t gpgme_op_keysign_start @
4019       (@w{gpgme_ctx_t @var{ctx}}, @
4020        @w{gpgme_key_t @var{key}}, @
4021        @w{const char *@var{userid}}, @
4022        @w{unsigned long @var{expires}}, @
4023        @w{unsigned int @var{flags}});
4024
4025 The function @code{gpgme_op_keysign_start} initiates a
4026 @code{gpgme_op_keysign} operation; see there for details.  It must
4027 be completed by calling @code{gpgme_wait} on the context.
4028 @xref{Waiting For Completion}.
4029
4030 @end deftypefun
4031
4032
4033 @c
4034 @c  EXPORTING KEYS
4035 @c
4036 @node Exporting Keys
4037 @subsection Exporting Keys
4038 @cindex key, export
4039 @cindex key ring, export from
4040
4041 Exporting keys means the same as running @command{gpg} with the command
4042 @option{--export}.  However, a mode flag can be used to change the way
4043 the export works.  The available mode flags are described below, they
4044 may be or-ed together.
4045
4046 @table @code
4047
4048 @item GPGME_EXPORT_MODE_EXTERN
4049 If this bit is set, the output is send directly to the default
4050 keyserver. This is currently only allowed for OpenPGP keys.  It is good
4051 practise to not send more than a few dozens key to a keyserver at one
4052 time.  Using this flag requires that the @var{keydata} argument of the
4053 export function is set to @code{NULL}.
4054
4055 @item GPGME_EXPORT_MODE_MINIMAL
4056 If this bit is set, the smallest possible key is exported.  For OpenPGP
4057 keys it removes all signatures except for the latest self-signatures.
4058 For X.509 keys it has no effect.
4059
4060
4061 @item GPGME_EXPORT_MODE_SECRET
4062 Instead of exporting the public key, the secret key is exported.  This
4063 may not be combined with @code{GPGME_EXPORT_MODE_EXTERN}.  For X.509
4064 the export format is PKCS#8.
4065
4066 @item GPGME_EXPORT_MODE_RAW
4067 If this flag is used with @code{GPGME_EXPORT_MODE_SECRET} for an X.509
4068 key the export format will be changed to PKCS#1.  This flag may not be
4069 used with OpenPGP.
4070
4071 @item GPGME_EXPORT_MODE_PKCS12
4072 If this flag is used with @code{GPGME_EXPORT_MODE_SECRET} for an X.509
4073 key the export format will be changed to PKCS#12 which also includes
4074 the certificate.  This flag may not be used with OpenPGP.
4075
4076 @end table
4077
4078
4079
4080 @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}})
4081 The function @code{gpgme_op_export} extracts public keys and returns
4082 them in the data buffer @var{keydata}.  The output format of the key
4083 data returned is determined by the @acronym{ASCII} armor attribute set
4084 for the context @var{ctx}, or, if that is not set, by the encoding
4085 specified for @var{keydata}.
4086
4087 If @var{pattern} is @code{NULL}, all available keys are returned.
4088 Otherwise, @var{pattern} contains an engine specific expression that
4089 is used to limit the list to all keys matching the pattern.
4090
4091 @var{mode} is usually 0; other values are described above.
4092
4093 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4094 operation completed successfully, @code{GPG_ERR_INV_VALUE} if
4095 @var{keydata} is not a valid empty data buffer, and passes through any
4096 errors that are reported by the crypto engine support routines.
4097 @end deftypefun
4098
4099 @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}})
4100 The function @code{gpgme_op_export_start} initiates a
4101 @code{gpgme_op_export} operation.  It can be completed by calling
4102 @code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
4103
4104 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4105 operation could be started successfully, and @code{GPG_ERR_INV_VALUE}
4106 if @var{keydata} is not a valid empty data buffer.
4107 @end deftypefun
4108
4109 @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}})
4110 The function @code{gpgme_op_export} extracts public keys and returns
4111 them in the data buffer @var{keydata}.  The output format of the key
4112 data returned is determined by the @acronym{ASCII} armor attribute set
4113 for the context @var{ctx}, or, if that is not set, by the encoding
4114 specified for @var{keydata}.
4115
4116 If @var{pattern} or @var{*pattern} is @code{NULL}, all available keys
4117 are returned.  Otherwise, @var{pattern} is a @code{NULL} terminated
4118 array of strings that are used to limit the list to all keys matching
4119 at least one of the patterns verbatim.
4120
4121 @var{mode} is usually 0; other values are described above.
4122
4123 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4124 operation completed successfully, @code{GPG_ERR_INV_VALUE} if
4125 @var{keydata} is not a valid empty data buffer, and passes through any
4126 errors that are reported by the crypto engine support routines.
4127 @end deftypefun
4128
4129 @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}})
4130 The function @code{gpgme_op_export_ext_start} initiates a
4131 @code{gpgme_op_export_ext} operation.  It can be completed by calling
4132 @code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
4133
4134 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4135 operation could be started successfully, and @code{GPG_ERR_INV_VALUE}
4136 if @var{keydata} is not a valid empty data buffer.
4137 @end deftypefun
4138
4139
4140 @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}})
4141 The function @code{gpgme_op_export_keys} extracts public keys and returns
4142 them in the data buffer @var{keydata}.  The output format of the key
4143 data returned is determined by the @acronym{ASCII} armor attribute set
4144 for the context @var{ctx}, or, if that is not set, by the encoding
4145 specified for @var{keydata}.
4146
4147 The keys to export are taken form the @code{NULL} terminated array
4148 @var{keys}.  Only keys of the currently selected protocol of
4149 @var{ctx} which do have a fingerprint set are considered for export.
4150 Other keys specified by the @var{keys} are ignored.  In particular
4151 OpenPGP keys retrieved via an external key listing are not included.
4152
4153 @var{mode} is usually 0; other values are described above.
4154
4155 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4156 operation completed successfully, @code{GPG_ERR_INV_VALUE} if
4157 @var{keydata} is not a valid empty data buffer, @code{GPG_ERR_NO_DATA}
4158 if no useful keys are in @var{keys} and passes through any errors that
4159 are reported by the crypto engine support routines.
4160 @end deftypefun
4161
4162 @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}})
4163 The function @code{gpgme_op_export_keys_start} initiates a
4164 @code{gpgme_op_export_ext} operation.  It can be completed by calling
4165 @code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
4166
4167 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4168 operation could be started successfully, and @code{GPG_ERR_INV_VALUE}
4169 if @var{keydata} is not a valid empty data buffer, @code{GPG_ERR_NO_DATA}
4170 if no useful keys are in @var{keys} and passes through any errors that
4171 are reported by the crypto engine support routines.
4172 @end deftypefun
4173
4174
4175 @node Importing Keys
4176 @subsection Importing Keys
4177 @cindex key, import
4178 @cindex key ring, import to
4179
4180 Importing keys means the same as running @command{gpg} with the command
4181 @option{--import}.
4182
4183
4184 @deftypefun gpgme_error_t gpgme_op_import (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{keydata}})
4185 The function @code{gpgme_op_import} adds the keys in the data buffer
4186 @var{keydata} to the key ring of the crypto engine used by @var{ctx}.
4187 The format of @var{keydata} can be @acronym{ASCII} armored, for example,
4188 but the details are specific to the crypto engine.
4189
4190 After the operation completed successfully, the result can be
4191 retrieved with @code{gpgme_op_import_result}.
4192
4193 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4194 import was completed successfully, @code{GPG_ERR_INV_VALUE} if
4195 @var{keydata} if @var{ctx} or @var{keydata} is not a valid pointer,
4196 and @code{GPG_ERR_NO_DATA} if @var{keydata} is an empty data buffer.
4197 @end deftypefun
4198
4199 @deftypefun gpgme_error_t gpgme_op_import_start (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_data_t @var{keydata}})
4200 The function @code{gpgme_op_import_start} initiates a
4201 @code{gpgme_op_import} 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 import could be started successfully, @code{GPG_ERR_INV_VALUE} if
4206 @var{keydata} if @var{ctx} or @var{keydata} is not a valid pointer,
4207 and @code{GPG_ERR_NO_DATA} if @var{keydata} is an empty data buffer.
4208 @end deftypefun
4209
4210 @deftypefun gpgme_error_t gpgme_op_import_keys (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t *@var{keys}})
4211 The function @code{gpgme_op_import_keys} adds the keys described by the
4212 @code{NULL} terminated array @var{keys} to the key ring of the crypto
4213 engine used by @var{ctx}.  This function is the general interface to
4214 move a key from one crypto engine to another as long as they are
4215 compatible.  In particular it is used to actually import and make keys
4216 permanent which have been retrieved from an external source (i.e. using
4217 @code{GPGME_KEYLIST_MODE_EXTERN}).  @footnote{Thus it is a replacement
4218 for the usual workaround of exporting and then importing a key to make
4219 an X.509 key permanent.}
4220
4221 Only keys of the currently selected protocol of @var{ctx} are
4222 considered for import.  Other keys specified by the @var{keys} are
4223 ignored.  As of now all considered keys must have been retrieved using
4224 the same method, that is the used key listing mode must be identical.
4225
4226 After the operation completed successfully, the result can be
4227 retrieved with @code{gpgme_op_import_result}.
4228
4229 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4230 import was completed successfully, @code{GPG_ERR_INV_VALUE} if
4231 @var{keydata} if @var{ctx} or @var{keydata} is not a valid pointer,
4232 @code{GPG_ERR_CONFLICT} if the key listing mode does not match, and
4233 @code{GPG_ERR_NO_DATA} if no keys are considered for export.
4234 @end deftypefun
4235
4236 @deftypefun gpgme_error_t gpgme_op_import_keys_start (@w{gpgme_ctx_t @var{ctx}}, @w{gpgme_key_t *@var{keys}})
4237 The function @code{gpgme_op_import_keys_start} initiates a
4238 @code{gpgme_op_import_keys} operation.  It can be completed by calling
4239 @code{gpgme_wait} on the context.  @xref{Waiting For Completion}.
4240
4241 The function returns the error code @code{GPG_ERR_NO_ERROR} if the
4242 import was completed successfully, @code{GPG_ERR_INV_VALUE} if
4243 @var{keydata} if @var{ctx} or @var{keydata} is not a valid pointer,
4244 @code{GPG_ERR_CONFLICT} if the key listing mode does not match, and
4245 @code{GPG_ERR_NO_DATA} if no keys are considered for export.
4246 @end deftypefun
4247
4248 @deftp {Data type} {gpgme_import_status_t}
4249 This is a pointer to a structure used to store a part of the result of
4250 a @code{gpgme_op_import} operation.  For each considered key one
4251 status is added that contains information about the result of the
4252 import.  The structure contains the following members:
4253
4254 @table @code
4255 @item gpgme_import_status_t next
4256 This is a pointer to the next status structure in the linked list, or
4257 @code{NULL} if this is the last element.
4258
4259 @item char *fpr
4260 This is the fingerprint of the key that was considered.
4261
4262 @item gpgme_error_t result
4263 If the import was not successful, this is the error value that caused
4264 the import to fail.  Otherwise the error code is
4265 @code{GPG_ERR_NO_ERROR}.
4266
4267 @item unsigned int status
4268 This is a bit-wise OR of the following flags that give more
4269 information about what part of the key was imported.  If the key was
4270 already known, this might be 0.
4271
4272 @table @code
4273 @item GPGME_IMPORT_NEW
4274 The key was new.
4275
4276 @item GPGME_IMPORT_UID
4277 The key contained new user IDs.
4278
4279 @item GPGME_IMPORT_SIG
4280 The key contained new signatures.
4281
4282 @item GPGME_IMPORT_SUBKEY
4283 The key contained new sub keys.
4284
4285 @item GPGME_IMPORT_SECRET
4286 The key contained a secret key.
4287 @end table
4288 @end table
4289 @end deftp
4290
4291 @deftp {Data type} {gpgme_import_result_t}
4292 This is a pointer to a structure used to store the result of a
4293 @code{gpgme_op_import} operation.  After a successful import
4294 operation, you can retrieve the pointer to the result with
4295 @code{gpgme_op_import_result}.  The structure contains the following
4296 members:
4297
4298 @table @code
4299 @item int considered
4300 The total number of considered keys.
4301
4302 @item int no_user_id
4303 The number of keys without user ID.
4304
4305 @item int imported
4306 The total number of imported keys.
4307
4308 @item int imported_rsa
4309 The number of imported RSA keys.
4310
4311 @item int unchanged
4312 The number of unchanged keys.
4313
4314 @item int new_user_ids
4315 The number of new user IDs.
4316
4317 @item int new_sub_keys
4318 The number of new sub keys.
4319
4320 @item int new_signatures
4321 The number of new signatures.
4322
4323 @item int new_revocations
4324 The number of new revocations.
4325
4326 @item int secret_read
4327 The total number of secret keys read.
4328
4329 @item int secret_imported
4330 The number of imported secret keys.
4331
4332 @item int secret_unchanged
4333 The number of unchanged secret keys.
4334
4335 @item int not_imported
4336 The number of keys not imported.
4337
4338 @item gpgme_import_status_t imports
4339 A list of gpgme_import_status_t objects which contain more information
4340 about the keys for which an import was attempted.
4341 @end table
4342 @end deftp
4343
4344 @deftypefun gpgme_import_result_t gpgme_op_import_result (@w{gpgme_ctx_t @var{ctx}})
4345 The function @code{gpgme_op_import_result} returns a
4346 @code{gpgme_import_result_t} pointer to a structure holding the result
4347 of a @code{gpgme_op_import} operation.  The pointer is only valid if
4348 the last operation on the context was a @code{gpgme_op_import} or
4349 @code{gpgme_op_import_start} operation, and if this operation finished
4350 successfully.  The returned pointer is only valid until the next
4351 operation is started on the context.
4352 @end deftypefun
4353
4354 @node Deleting Keys
4355 @subsection Deleting Keys
4356 @cindex key, delete
4357 @cindex key ring, delete from
4358
4359 @deftypefun gpgme_error_t gpgme_op_delete (@w{gpgme_ctx_t @var{ctx}}, @w{const gpgme_key_t @var{key}}, @w{int @var{allow_secret}})
4360 The function @code{gpgme_op_delete} deletes the key @var{key} from the
4361 key ring of the crypto engine used by @var{ctx}.  If
4362 @var{allow_secret} is @code{0}, only public keys are deleted,
4363 otherwise secret keys are deleted as well, if that is supported.
4364
4365 The function returns the error code @code{GPG_ERR_NO_ERROR} if the key
4366 was deleted successfully, @code{GPG_ERR_INV_VALUE} if @var{ctx}