]> CyberLeo.Net >> Repos - FreeBSD/releng/10.3.git/blob - contrib/file/magic/Magdir/pgp
Update file(1) to new version with security update. [EN-18:02.file]
[FreeBSD/releng/10.3.git] / contrib / file / magic / Magdir / pgp
1
2 #------------------------------------------------------------------------------
3 # $File: pgp,v 1.14 2017/03/17 21:35:28 christos Exp $
4 # pgp:  file(1) magic for Pretty Good Privacy
5 # see http://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html
6 #
7 0       beshort         0x9900                  PGP key public ring
8 !:mime  application/x-pgp-keyring
9 0       beshort         0x9501                  PGP key security ring
10 !:mime  application/x-pgp-keyring
11 0       beshort         0x9500                  PGP key security ring
12 !:mime  application/x-pgp-keyring
13 0       beshort         0xa600                  PGP encrypted data
14 #!:mime application/pgp-encrypted
15 #0      string          -----BEGIN\040PGP       text/PGP armored data
16 !:mime  text/PGP # encoding: armored data
17 #>15    string  PUBLIC\040KEY\040BLOCK- public key block
18 #>15    string  MESSAGE-                message
19 #>15    string  SIGNED\040MESSAGE-      signed message
20 #>15    string  PGP\040SIGNATURE-       signature
21
22 2       string  ---BEGIN\040PGP\040PUBLIC\040KEY\040BLOCK-      PGP public key block
23 !:mime  application/pgp-keys
24 >10     search/100      \n\n
25 >>&0    use             pgp
26 0       string  -----BEGIN\040PGP\040MESSAGE-           PGP message
27 !:mime  application/pgp
28 >10     search/100      \n\n
29 >>&0    use             pgp
30 0       string  -----BEGIN\040PGP\040SIGNATURE-         PGP signature
31 !:mime  application/pgp-signature
32 >10     search/100      \n\n
33 >>&0    use             pgp
34
35 # Decode the type of the packet based on it's base64 encoding.
36 # Idea from Mark Martinec
37 # The specification is in RFC 4880, section 4.2 and 4.3:
38 # http://tools.ietf.org/html/rfc4880#section-4.2
39
40 0       name            pgp
41 >0      byte            0x67            Reserved (old)
42 >0      byte            0x68            Public-Key Encrypted Session Key (old)
43 >0      byte            0x69            Signature (old)
44 >0      byte            0x6a            Symmetric-Key Encrypted Session Key (old)
45 >0      byte            0x6b            One-Pass Signature (old)
46 >0      byte            0x6c            Secret-Key (old)
47 >0      byte            0x6d            Public-Key (old)
48 >0      byte            0x6e            Secret-Subkey (old)
49 >0      byte            0x6f            Compressed Data (old)
50 >0      byte            0x70            Symmetrically Encrypted Data (old)
51 >0      byte            0x71            Marker (old)
52 >0      byte            0x72            Literal Data (old)
53 >0      byte            0x73            Trust (old)
54 >0      byte            0x74            User ID (old)
55 >0      byte            0x75            Public-Subkey (old)
56 >0      byte            0x76            Unused (old)
57 >0      byte            0x77
58 >>1     byte&0xc0       0x00            Reserved
59 >>1     byte&0xc0       0x40            Public-Key Encrypted Session Key
60 >>1     byte&0xc0       0x80            Signature
61 >>1     byte&0xc0       0xc0            Symmetric-Key Encrypted Session Key
62 >0      byte            0x78
63 >>1     byte&0xc0       0x00            One-Pass Signature
64 >>1     byte&0xc0       0x40            Secret-Key
65 >>1     byte&0xc0       0x80            Public-Key
66 >>1     byte&0xc0       0xc0            Secret-Subkey
67 >0      byte            0x79
68 >>1     byte&0xc0       0x00            Compressed Data
69 >>1     byte&0xc0       0x40            Symmetrically Encrypted Data
70 >>1     byte&0xc0       0x80            Marker
71 >>1     byte&0xc0       0xc0            Literal Data
72 >0      byte            0x7a
73 >>1     byte&0xc0       0x00            Trust
74 >>1     byte&0xc0       0x40            User ID
75 >>1     byte&0xc0       0x80            Public-Subkey
76 >>1     byte&0xc0       0xc0            Unused [z%x]
77 >0      byte            0x30
78 >>1     byte&0xc0       0x00            Unused [0%x]
79 >>1     byte&0xc0       0x40            User Attribute
80 >>1     byte&0xc0       0x80            Sym. Encrypted and Integrity Protected Data
81 >>1     byte&0xc0       0xc0            Modification Detection Code
82
83 # magic signatures to detect PGP crypto material (from stef)
84 # detects and extracts metadata from:
85 #  - symmetric encrypted packet header
86 #  - RSA (e=65537) secret (sub-)keys
87
88 # 1024b RSA encrypted data
89
90 0       string  \x84\x8c\x03            PGP RSA encrypted session key -
91 >3      lelong  x                       keyid: %X
92 >7      lelong  x                       %X
93 >11     byte    0x01                    RSA (Encrypt or Sign) 1024b
94 >11     byte    0x02                    RSA Encrypt-Only 1024b
95 >12     string  \x04\x00
96 >12     string  \x03\xff
97 >12     string  \x03\xfe
98 >12     string  \x03\xfd
99 >12     string  \x03\xfc
100 >12     string  \x03\xfb
101 >12     string  \x03\xfa
102 >12     string  \x03\xf9
103 >142    byte    0xd2                    .
104
105 # 2048b RSA encrypted data
106
107 0       string  \x85\x01\x0c\x03        PGP RSA encrypted session key -
108 >4      lelong  x                       keyid: %X
109 >8      lelong  x                       %X
110 >12     byte    0x01                    RSA (Encrypt or Sign) 2048b
111 >12     byte    0x02                    RSA Encrypt-Only 2048b
112 >13     string  \x08\x00
113 >13     string  \x07\xff
114 >13     string  \x07\xfe
115 >13     string  \x07\xfd
116 >13     string  \x07\xfc
117 >13     string  \x07\xfb
118 >13     string  \x07\xfa
119 >13     string  \x07\xf9
120 >271    byte    0xd2                    .
121
122 # 3072b RSA encrypted data
123
124 0       string  \x85\x01\x8c\x03        PGP RSA encrypted session key -
125 >4      lelong  x                       keyid: %X
126 >8      lelong  x                       %X
127 >12     byte    0x01                    RSA (Encrypt or Sign) 3072b
128 >12     byte    0x02                    RSA Encrypt-Only 3072b
129 >13     string  \x0c\x00
130 >13     string  \x0b\xff
131 >13     string  \x0b\xfe
132 >13     string  \x0b\xfd
133 >13     string  \x0b\xfc
134 >13     string  \x0b\xfb
135 >13     string  \x0b\xfa
136 >13     string  \x0b\xf9
137 >399    byte    0xd2                    .
138
139 # 3072b RSA encrypted data
140
141 0       string  \x85\x02\x0c\x03        PGP RSA encrypted session key -
142 >4      lelong  x                       keyid: %X
143 >8      lelong  x                       %X
144 >12     byte    0x01                    RSA (Encrypt or Sign) 4096b
145 >12     byte    0x02                    RSA Encrypt-Only 4096b
146 >13     string  \x10\x00
147 >13     string  \x0f\xff
148 >13     string  \x0f\xfe
149 >13     string  \x0f\xfd
150 >13     string  \x0f\xfc
151 >13     string  \x0f\xfb
152 >13     string  \x0f\xfa
153 >13     string  \x0f\xf9
154 >527    byte    0xd2                    .
155
156 # 4096b RSA encrypted data
157
158 0       string  \x85\x04\x0c\x03        PGP RSA encrypted session key -
159 >4      lelong  x                       keyid: %X
160 >8      lelong  x                       %X
161 >12     byte    0x01                    RSA (Encrypt or Sign) 8129b
162 >12     byte    0x02                    RSA Encrypt-Only 8129b
163 >13     string  \x20\x00
164 >13     string  \x1f\xff
165 >13     string  \x1f\xfe
166 >13     string  \x1f\xfd
167 >13     string  \x1f\xfc
168 >13     string  \x1f\xfb
169 >13     string  \x1f\xfa
170 >13     string  \x1f\xf9
171 >1039   byte    0xd2                    .
172
173 # crypto algo mapper
174
175 0       name    crypto
176 >0      byte    0x00                    Plaintext or unencrypted data
177 >0      byte    0x01                    IDEA
178 >0      byte    0x02                    TripleDES
179 >0      byte    0x03                    CAST5 (128 bit key)
180 >0      byte    0x04                    Blowfish (128 bit key, 16 rounds)
181 >0      byte    0x07                    AES with 128-bit key
182 >0      byte    0x08                    AES with 192-bit key
183 >0      byte    0x09                    AES with 256-bit key
184 >0      byte    0x0a                    Twofish with 256-bit key
185
186 # hash algo mapper
187
188 0       name    hash
189 >0      byte    0x01                    MD5
190 >0      byte    0x02                    SHA-1
191 >0      byte    0x03                    RIPE-MD/160
192 >0      byte    0x08                    SHA256
193 >0      byte    0x09                    SHA384
194 >0      byte    0x0a                    SHA512
195 >0      byte    0x0b                    SHA224
196
197 # display public key algorithms as human readable text
198 0       name    key_algo
199 >0      byte    0x01                    RSA (Encrypt or Sign)
200 # keep old look of version 5.28 without parentheses
201 >0      byte    0x02                    RSA Encrypt-Only
202 >0      byte    0x03                    RSA (Sign-Only)
203 >0      byte    16                      ElGamal (Encrypt-Only)
204 >0      byte    17                      DSA
205 >0      byte    18                      Elliptic Curve
206 >0      byte    19                      ECDSA
207 >0      byte    20                      ElGamal (Encrypt or Sign)
208 >0      byte    21                      Diffie-Hellman
209 >0      default x
210 >>0     ubyte   <22                     unknown (pub %d)
211 # this should never happen
212 >>0     ubyte   >21                     invalid (%d)
213
214 # pgp symmetric encrypted data
215
216 0       byte    0x8c                    PGP symmetric key encrypted data -
217 >1      byte    0x0d
218 >1      byte    0x0c
219 >2      byte    0x04
220 >3      use     crypto
221 >4      byte    0x01                    salted -
222 >>5     use     hash
223 >>14    byte    0xd2                    .
224 >>14    byte    0xc9                    .
225 >4      byte    0x03                    salted & iterated -
226 >>5     use     hash
227 >>15    byte    0xd2                    .
228 >>15    byte    0xc9                    .
229
230 # encrypted keymaterial needs s2k & can be checksummed/hashed
231
232 0       name    chkcrypto
233 >0      use     crypto
234 >1      byte    0x00                    Simple S2K
235 >1      byte    0x01                    Salted S2K
236 >1      byte    0x03                    Salted&Iterated S2K
237 >2      use     hash
238
239 # all PGP keys start with this prolog
240 # containing version, creation date, and purpose
241
242 0       name    keyprolog
243 >0      byte    0x04
244 >1      beldate x                       created on %s -
245 >5      byte    0x01                    RSA (Encrypt or Sign)
246 >5      byte    0x02                    RSA Encrypt-Only
247
248 # end of secret keys known signature
249 # contains e=65537 and the prolog to
250 # the encrypted parameters
251
252 0       name    keyend
253 >0      string  \x00\x11\x01\x00\x01    e=65537
254 >5      use     crypto
255 >5      byte    0xff                    checksummed
256 >>6     use     chkcrypto
257 >5      byte    0xfe                    hashed
258 >>6     use     chkcrypto
259
260 # PGP secret keys contain also the public parts
261 # these vary by bitsize of the key
262
263 0       name    x1024
264 >0      use     keyprolog
265 >6      string  \x03\xfe
266 >6      string  \x03\xff
267 >6      string  \x04\x00
268 >136    use     keyend
269
270 0       name    x2048
271 >0      use     keyprolog
272 >6      string  \x80\x00
273 >6      string  \x07\xfe
274 >6      string  \x07\xff
275 >264    use     keyend
276
277 0       name    x3072
278 >0      use     keyprolog
279 >6      string  \x0b\xfe
280 >6      string  \x0b\xff
281 >6      string  \x0c\x00
282 >392    use     keyend
283
284 0       name    x4096
285 >0      use     keyprolog
286 >6      string  \x10\x00
287 >6      string  \x0f\xfe
288 >6      string  \x0f\xff
289 >520    use     keyend
290
291 # \x00|\x1f[\xfe\xff]).{1024})'
292 0       name    x8192
293 >0      use     keyprolog
294 >6      string  \x20\x00
295 >6      string  \x1f\xfe
296 >6      string  \x1f\xff
297 >1032   use     keyend
298
299 # depending on the size of the pkt
300 # we branch into the proper key size
301 # signatures defined as x{keysize}
302
303 >0      name    pgpkey
304 >0      string  \x01\xd8        1024b
305 >>2     use     x1024
306 >0      string  \x01\xeb        1024b
307 >>2     use     x1024
308 >0      string  \x01\xfb        1024b
309 >>2     use     x1024
310 >0      string  \x01\xfd        1024b
311 >>2     use     x1024
312 >0      string  \x01\xf3        1024b
313 >>2     use     x1024
314 >0      string  \x01\xee        1024b
315 >>2     use     x1024
316 >0      string  \x01\xfe        1024b
317 >>2     use     x1024
318 >0      string  \x01\xf4        1024b
319 >>2     use     x1024
320 >0      string  \x02\x0d        1024b
321 >>2     use     x1024
322 >0      string  \x02\x03        1024b
323 >>2     use     x1024
324 >0      string  \x02\x05        1024b
325 >>2     use     x1024
326 >0      string  \x02\x15        1024b
327 >>2     use     x1024
328 >0      string  \x02\x00        1024b
329 >>2     use     x1024
330 >0      string  \x02\x10        1024b
331 >>2     use     x1024
332 >0      string  \x02\x04        1024b
333 >>2     use     x1024
334 >0      string  \x02\x06        1024b
335 >>2     use     x1024
336 >0      string  \x02\x16        1024b
337 >>2     use     x1024
338 >0      string  \x03\x98        2048b
339 >>2     use     x2048
340 >0      string  \x03\xab        2048b
341 >>2     use     x2048
342 >0      string  \x03\xbb        2048b
343 >>2     use     x2048
344 >0      string  \x03\xbd        2048b
345 >>2     use     x2048
346 >0      string  \x03\xcd        2048b
347 >>2     use     x2048
348 >0      string  \x03\xb3        2048b
349 >>2     use     x2048
350 >0      string  \x03\xc3        2048b
351 >>2     use     x2048
352 >0      string  \x03\xc5        2048b
353 >>2     use     x2048
354 >0      string  \x03\xd5        2048b
355 >>2     use     x2048
356 >0      string  \x03\xae        2048b
357 >>2     use     x2048
358 >0      string  \x03\xbe        2048b
359 >>2     use     x2048
360 >0      string  \x03\xc0        2048b
361 >>2     use     x2048
362 >0      string  \x03\xd0        2048b
363 >>2     use     x2048
364 >0      string  \x03\xb4        2048b
365 >>2     use     x2048
366 >0      string  \x03\xc4        2048b
367 >>2     use     x2048
368 >0      string  \x03\xc6        2048b
369 >>2     use     x2048
370 >0      string  \x03\xd6        2048b
371 >>2     use     x2048
372 >0      string  \x05X           3072b
373 >>2     use     x3072
374 >0      string  \x05k           3072b
375 >>2     use     x3072
376 >0      string  \x05{           3072b
377 >>2     use     x3072
378 >0      string  \x05}           3072b
379 >>2     use     x3072
380 >0      string  \x05\x8d        3072b
381 >>2     use     x3072
382 >0      string  \x05s           3072b
383 >>2     use     x3072
384 >0      string  \x05\x83        3072b
385 >>2     use     x3072
386 >0      string  \x05\x85        3072b
387 >>2     use     x3072
388 >0      string  \x05\x95        3072b
389 >>2     use     x3072
390 >0      string  \x05n           3072b
391 >>2     use     x3072
392 >0      string  \x05\x7e        3072b
393 >>2     use     x3072
394 >0      string  \x05\x80        3072b
395 >>2     use     x3072
396 >0      string  \x05\x90        3072b
397 >>2     use     x3072
398 >0      string  \x05t           3072b
399 >>2     use     x3072
400 >0      string  \x05\x84        3072b
401 >>2     use     x3072
402 >0      string  \x05\x86        3072b
403 >>2     use     x3072
404 >0      string  \x05\x96        3072b
405 >>2     use     x3072
406 >0      string  \x07[           4096b
407 >>2     use     x4096
408 >0      string  \x07\x18        4096b
409 >>2     use     x4096
410 >0      string  \x07+           4096b
411 >>2     use     x4096
412 >0      string  \x07;           4096b
413 >>2     use     x4096
414 >0      string  \x07=           4096b
415 >>2     use     x4096
416 >0      string  \x07M           4096b
417 >>2     use     x4096
418 >0      string  \x073           4096b
419 >>2     use     x4096
420 >0      string  \x07C           4096b
421 >>2     use     x4096
422 >0      string  \x07E           4096b
423 >>2     use     x4096
424 >0      string  \x07U           4096b
425 >>2     use     x4096
426 >0      string  \x07.           4096b
427 >>2     use     x4096
428 >0      string  \x07>           4096b
429 >>2     use     x4096
430 >0      string  \x07@           4096b
431 >>2     use     x4096
432 >0      string  \x07P           4096b
433 >>2     use     x4096
434 >0      string  \x074           4096b
435 >>2     use     x4096
436 >0      string  \x07D           4096b
437 >>2     use     x4096
438 >0      string  \x07F           4096b
439 >>2     use     x4096
440 >0      string  \x07V           4096b
441 >>2     use     x4096
442 >0      string  \x0e[           8192b
443 >>2     use     x8192
444 >0      string  \x0e\x18        8192b
445 >>2     use     x8192
446 >0      string  \x0e+           8192b
447 >>2     use     x8192
448 >0      string  \x0e;           8192b
449 >>2     use     x8192
450 >0      string  \x0e=           8192b
451 >>2     use     x8192
452 >0      string  \x0eM           8192b
453 >>2     use     x8192
454 >0      string  \x0e3           8192b
455 >>2     use     x8192
456 >0      string  \x0eC           8192b
457 >>2     use     x8192
458 >0      string  \x0eE           8192b
459 >>2     use     x8192
460 >0      string  \x0eU           8192b
461 >>2     use     x8192
462 >0      string  \x0e.           8192b
463 >>2     use     x8192
464 >0      string  \x0e>           8192b
465 >>2     use     x8192
466 >0      string  \x0e@           8192b
467 >>2     use     x8192
468 >0      string  \x0eP           8192b
469 >>2     use     x8192
470 >0      string  \x0e4           8192b
471 >>2     use     x8192
472 >0      string  \x0eD           8192b
473 >>2     use     x8192
474 >0      string  \x0eF           8192b
475 >>2     use     x8192
476 >0      string  \x0eV           8192b
477 >>2     use     x8192
478
479 # PGP RSA (e=65537) secret (sub-)key header
480
481 0       byte    0x95                    PGP     Secret Key -
482 >1      use     pgpkey
483 0       byte    0x97                    PGP     Secret Sub-key -
484 >1      use     pgpkey
485 0       byte    0x9d
486 # Update: Joerg Jenderek
487 # secret subkey packet (tag 7) with same structure as secret key packet (tag 5)
488 # skip Fetus.Sys16 CALIBUS.MAIN OrbFix.Sys16.Ex by looking for positive len
489 >1      ubeshort        >0
490 #>1     ubeshort        x               \b, body length 0x%x
491 # next packet type often 88h,89h~(tag 2)~Signature Packet
492 #>>(1.S+3)      ubyte   x               \b, next packet type 0x%x
493 # skip Dragon.SHR DEMO.INIT by looking for positive version
494 >>3     ubyte           >0
495 # skip BUISSON.13 GUITAR1 by looking for low version number
496 >>>3    ubyte           <5              PGP Secret Sub-key
497 # sub-key are normally part of secret key. So it does not occur as standalone file
498 #!:ext  bin
499 # version 2,3~old 4~new . Comment following line for version 5.28 look
500 >>>>3   ubyte           x               (v%d)
501 >>>>3   ubyte           x               -
502 # old versions 2 or 3 but no real example found
503 >>>>3   ubyte           <4
504 # 2 byte for key bits in version 5.28 look
505 >>>>>11         ubeshort        x       %db
506 >>>>>4          beldate         x       created on %s -
507 # old versions use 2 additional bytes after time stamp
508 #>>>>>8         ubeshort        x       0x%x
509 # display key algorithm 1~RSA Encrypt|Sign - 21~Diffie-Hellman
510 >>>>>10         use             key_algo
511 >>>>>(11.S/8)   ubequad         x
512 # look after first key
513 >>>>>>&5        use             keyend
514 # new version
515 >>>>3   ubyte           >3
516 >>>>>9          ubeshort        x       %db
517 >>>>>4          beldate         x       created on %s -
518 # display key algorithm
519 >>>>>8          use             key_algo
520 >>>>>(9.S/8)    ubequad         x
521 # look after first key for something like s2k
522 >>>>>>&3        use             keyend