...
1 package magic
2
3 import "bytes"
4
5 var (
6
7
8 Pdf = prefix(
9
10 []byte("%PDF-"),
11
12 []byte("\012%PDF-"),
13
14 []byte("\xef\xbb\xbf%PDF-"),
15 )
16
17 Fdf = prefix([]byte("%FDF"))
18
19 Mobi = offset([]byte("BOOKMOBI"), 60)
20
21 Lit = prefix([]byte("ITOLITLS"))
22 )
23
24
25 func DjVu(raw []byte, limit uint32) bool {
26 if len(raw) < 12 {
27 return false
28 }
29 if !bytes.HasPrefix(raw, []byte{0x41, 0x54, 0x26, 0x54, 0x46, 0x4F, 0x52, 0x4D}) {
30 return false
31 }
32 return bytes.HasPrefix(raw[12:], []byte("DJVM")) ||
33 bytes.HasPrefix(raw[12:], []byte("DJVU")) ||
34 bytes.HasPrefix(raw[12:], []byte("DJVI")) ||
35 bytes.HasPrefix(raw[12:], []byte("THUM"))
36 }
37
38
39 func P7s(raw []byte, limit uint32) bool {
40
41 if bytes.HasPrefix(raw, []byte("-----BEGIN PKCS7")) {
42 return true
43 }
44
45 if len(raw) < 20 {
46 return false
47 }
48
49 startHeader := [][]byte{{0x30, 0x80}, {0x30, 0x81}, {0x30, 0x82}, {0x30, 0x83}, {0x30, 0x84}}
50 signedDataMatch := []byte{0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07}
51
52 for i, match := range startHeader {
53
54 if bytes.HasPrefix(raw, match) {
55 if bytes.HasPrefix(raw[i+2:], signedDataMatch) {
56 return true
57 }
58 }
59 }
60
61 return false
62 }
63
View as plain text