31b62eb4b17e8aca62d24194a6e501362124b23f
[gnupg-doc.git] / web / software / libassuan / index.org
1 #+STARTUP: showall
2 #+SETUPFILE: "../../share/setup.inc"
3
4 * Libassuan
5
6   /Libassuan/ is a small library implementing the so-called /Assuan
7   protocol/. This protocol is used for IPC between most newer GnuPG
8   components. Both, server and client side functions are provided.
9
10   In an ideal world, Assuan is irrelevant. Assuan's primary use is to
11   allow a client to interact with a non-persistent server. Using
12   Assuan, this is accomplished by forking a subprocess and
13   communicating with it via, for example, a pipe or unix domain
14   socket. This method is neither elegant nor efficient especially when
15   there is a lot of data spread across several transactions: not only
16   is there a penalty for an increased number of context switches, but
17   also a significant amount of data is memcpy-ed from the client to a
18   file descriptor and from the file descriptor to the server. Despite
19   these and other disadvantages, this type of client/server
20   communication can be useful: the client is completely separate from
21   the server; they are in different address spaces. This is especially
22   important in situations where the server must have a known degree of
23   reliability and data must be protected: as the Assuan protocol is
24   well defined and clients cannot corrupt the servers' address space,
25   auditing become much easier.
26
27   Assuan was developed for use by the GNU Privacy Guard, GnuPG, to
28   prevent potentially buggy clients from unwittingly corrupting
29   sensitive transactions or compromising data such as a secret
30   key. Assuan permits the servers, which do the actual work,
31   e.g. encryption and decryption of data using a secret key, to be
32   developed independently of the user interfaces, e.g. mail clients
33   and other encryption front ends. Like a shared library, the
34   interface is well defined and any number of front ends can use it;
35   however, unlike a shared library, the client cannot see or touch the
36   server's data. As with any modular system, Assuan helps keep the
37   servers small and understandable, and helps to make code more
38   understandable and less error prone.
39
40   Assuan is not, however, limited to use with GnuPG servers and
41   clients: it was design to be flexible enough to meet the demands of
42   almost any transaction based environment with non-persistent
43   servers.
44
45   See the [[../../download/index.org::libassuan][download]] section for the latest tarball.