d6cb8ab4c5035508bc8a7538f6e7f6e444c0e4df
[gnupg.git] / doc / HACKING
1                       A Hacker's Guide to GNUPG
2                    ================================
3                    (Some notes on GNUPG internals.)
4
5
6 * No more ChangeLog files
7
8 Do not modify any of the ChangeLog files in GnuPG.  Starting on
9 December 1st, 2011 we put change information only in the GIT commit
10 log, and generate a top-level ChangeLog file from logs at "make dist"
11 time.  As such, there are strict requirements on the form of the
12 commit log messages.  The old ChangeLog files have all be renamed to
13 ChangeLog-2011
14
15
16 * Commit log requirements
17
18 Your commit log should always start with a one-line summary, the second
19 line should be blank, and the remaining lines are usually ChangeLog-style
20 entries for all affected files.  However, it's fine -- even recommended --
21 to write a few lines of prose describing the change, when the summary
22 and ChangeLog entries don't give enough of the big picture.  Omit the
23 leading TABs that you're used to seeing in a "real" ChangeLog file, but
24 keep the maximum line length at 72 or smaller, so that the generated
25 ChangeLog lines, each with its leading TAB, will not exceed 80 columns.
26
27
28
29 ===> What follows is probably out of date <===
30
31
32 RFCs
33 ====
34
35 1423  Privacy Enhancement for Internet Electronic Mail:
36       Part III: Algorithms, Modes, and Identifiers.
37
38 1489  Registration of a Cyrillic Character Set.
39
40 1750  Randomness Recommendations for Security.
41
42 1991  PGP Message Exchange Formats.
43
44 2015  MIME Security with Pretty Good Privacy (PGP).
45
46 2144  The CAST-128 Encryption Algorithm.
47
48 2279  UTF-8, a transformation format of ISO 10646.
49
50 2440  OpenPGP.
51
52
53
54 Directory Layout
55 ----------------
56   ./           Readme, configure
57   ./agent      Gpg-agent and related tools
58   ./doc        Documentation
59   ./doc        Documentation
60   ./g10        Gpg program here called gpg2
61   ./jnlib      Utility functions
62   ./kbx        Keybox library
63   ./scd        Smartcard daemon
64   ./scripts    Scripts needed by configure and others
65   ./sm         Gpgsm program
66
67
68 Detailed Roadmap
69 ----------------
70 g10/gpg.c       Main module with option parsing and all the stuff you have
71                 to do on startup.  Also has the exout handler and some
72                 helper functions.
73 g10/sign.c      Create signature and optionally encrypt
74
75 g10/parse-packet.c
76 g10/build-packet.c
77 g10/free-packet.c
78                 Parsing and creating of OpenPGP message packets.
79
80 g10/getkey.c    Key selection code
81 g10/pkclist.c   Build a list of public keys
82 g10/skclist.c   Build a list of secret keys
83 g10/ringedit.c  Keyring I/O
84 g10/keydb.h
85
86 g10/keyid.c     Helper functions to get the keyid, fingerprint etc.
87
88
89 g10/trustdb.c
90 g10/trustdb.h
91 g10/tdbdump.c
92                Management of the trustdb.gpg
93
94 g10/compress.c Filter to handle compression
95 g10/filter.h   Declarations for all filter functions
96 g10/delkey.c   Delete a key
97 g10/kbnode.c   Helper for the KBNODE linked list
98 g10/main.h     Prototypes and some constants
99 g10/mainproc.c Message processing
100 g10/armor.c    Ascii armor filter
101 g10/mdfilter.c Filter to calculate hashs
102 g10/textfilter.c Filter to handle CR/LF and trailing white space
103 g10/cipher.c   En-/Decryption filter
104 g10/misc.c     Utlity functions
105 g10/options.h  Structure with all the command line options
106                and related constants
107 g10/openfile.c Create/Open Files
108 g10/tdbio.c    I/O handling for the trustdb.gpg
109 g10/tdbio.h
110 g10/hkp.h      Keyserver access
111 g10/hkp.c
112 g10/packet.h   Defintion of OpenPGP structures.
113 g10/passphrase.c  Passphrase handling code
114 g10/pubkey-enc.c
115 g10/seckey-cert.c
116 g10/seskey.c
117 g10/import.c
118 g10/export.c
119 g10/comment.c
120 g10/status.c
121 g10/status.h
122 g10/sign.c
123 g10/plaintext.c
124 g10/encr-data.c
125 g10/encode.c
126 g10/revoke.c
127 g10/keylist.c
128 g10/sig-check.c
129 g10/signal.c
130 g10/helptext.c
131 g10/verify.c
132 g10/decrypt.c
133 g10/keyedit.c
134 g10/dearmor.c
135 g10/keygen.c
136
137
138
139 Memory allocation
140 -----------------
141 Use only the functions:
142
143     xmalloc
144     xmalloc_secure
145     xtrymalloc
146     xtrymalloc_secure
147     xcalloc
148     xcalloc_secure
149     xtrycalloc
150     xtrycalloc_secure
151     xrealloc
152     xtryrealloc
153     xstrdup
154     xtrystrdup
155     xfree
156
157
158 The *secure versions allocated memory in the secure memory. That is,
159 swapping out of this memory is avoided and is gets overwritten on
160 free.  Use this for passphrases, session keys and other sensitive
161 material.  This memory set aside for secure memory is linited to a few
162 k.  In general the function don't print a memeory message and
163 terminate the process if there is not enough memory available.  The
164 "try" versions of the functions return NULL instead.
165
166
167 Logging
168 -------
169
170
171
172
173
174
175 Option parsing
176 ---------------
177 GNUPG does not use getopt or GNU getopt but functions of it's own.  See
178 util/argparse.c for details.  The advantage of these functions is that
179 it is more easy to display and maintain the help texts for the options.
180 The same option table is also used to parse resource files.
181
182
183
184 What is an IOBUF
185 ----------------
186 This is the data structure used for most I/O of gnupg.  It is similar
187 to System V Streams but much simpler.  Because OpenPGP messages are nested
188 in different ways; the use of such a system has big advantages.  Here is
189 an example, how it works:  If the parser sees a packet header with a partial
190 length, it pushes the block_filter onto the IOBUF to handle these partial
191 length packets: from now on you don't have to worry about this.  When it sees
192 a compressed packet it pushes the uncompress filter and the next read byte
193 is one which has already been uncompressed by this filter. Same goes for
194 enciphered packet, plaintext packets and so on.  The file g10/encode.c
195 might be a good staring point to see how it is used  - actually this is
196 the other way: constructing messages using pushed filters but it may be
197 easier to understand.
198
199